Moonlight Design moonlightwiki https://www.moonlightdesign.org/Main_Page MediaWiki 1.39.8 first-letter Media Special Talk User User talk Moonlight Design Moonlight Design talk File File talk MediaWiki MediaWiki talk Template Template talk Help Help talk Category Category talk Main Page 0 1404 1404 2006-09-07T02:33:23Z Stevenlawrance 1 wikitext text/x-wiki The new Moonlight Design web site Site content will arrive soon. *[http://www.moonlightdesign.org/henry/ Henry Lamb] *[http://www.moonlightdesign.org/steve/ Steven Lawrance] 51a51be049105d9b2ae90ecbfbefd981088a244c 1405 1404 2007-04-22T21:54:00Z Stevenlawrance 1 wikitext text/x-wiki Welcome to Moonlight Design -- the personal web site of Henry Lamb and Steven Lawrance *[https://www.moonlightdesign.org/henry/ Henry Lamb] *[https://www.moonlightdesign.org/steve/ Steven Lawrance] This server also hosts several projects *[https://www.moonlightdesign.org/urllock/ URL Lock] *More to come.. 82841f5a225f7b0272f8df6df67bc8ac558d37ff 1406 1405 2007-04-24T14:33:56Z Stevenlawrance 1 wikitext text/x-wiki Welcome to Moonlight Design -- the personal web site of Henry Lamb and Steven Lawrance *[https://www.moonlightdesign.org/henry/ Henry Lamb] *[https://www.moonlightdesign.org/steve/ Steven Lawrance] This server also hosts several projects *[https://www.moonlightdesign.org/urllock/ URL Lock] *[https://www.moonlightdesign.org/thunderforce/ Thunderforce] *More to come.. d7fdc3d352acda3bbfcfd6520759962916de3b59 1407 1406 2007-04-24T14:34:55Z Stevenlawrance 1 wikitext text/x-wiki Welcome to Moonlight Design -- the personal web site of Henry Lamb and Steven Lawrance *[https://www.moonlightdesign.org/henry/ Henry Lamb] *[https://www.moonlightdesign.org/steve/ Steven Lawrance] This server also hosts several projects *[https://www.moonlightdesign.org/urllock/ URL Lock] *[https://www.moonlightdesign.org/thunderforce/ Thunderforce] *Teacher's Pet Firefox tab sharing extension (coming soon; extension is already written, but not posted online yet..) *More to come.. 68e3ff952f07c4bfbed14dc0f6d705afe86af2ad 1408 1407 2007-06-10T17:30:41Z Stevenlawrance 1 wikitext text/x-wiki Welcome to Moonlight Design -- the personal web site of Henry Lamb and Steven Lawrance *[https://www.moonlightdesign.org/henry/ Henry Lamb] *[https://www.moonlightdesign.org/steve/ Steven Lawrance] This server also hosts several projects *[https://www.moonlightdesign.org/urllock/ URL Lock] *[https://www.moonlightdesign.org/thunderforce/ Thunderforce] *Teacher's Pet Firefox tab sharing extension (coming soon; extension is already written, but not posted online yet..) *[[Serendipity|Public files for the Team Serendipity Master of Software Engineering (MSE) studio project]] *More to come.. 1cb5ba44edc802f356bfd17a250f9ebf95280301 1416 1408 2007-06-10T18:35:49Z Stevenlawrance 1 wikitext text/x-wiki Welcome to Moonlight Design -- the personal web site of Henry Lamb and Steven Lawrance *[https://www.moonlightdesign.org/henry/ Henry Lamb] *[https://www.moonlightdesign.org/steve/ Steven Lawrance] This server also hosts several projects *[https://www.moonlightdesign.org/urllock/ URL Lock] *[https://www.moonlightdesign.org/thunderforce/ Thunderforce] *Teacher's Pet Firefox tab sharing extension (coming soon; extension is already written, but not posted online yet..) *[[Serendipity|Team Serendipity Master of Software Engineering (MSE) studio project]] *More to come.. b3bf23cda512feb19779f1e9778aa4542ad25ae9 1421 1416 2007-08-04T23:09:12Z Stevenlawrance 1 wikitext text/x-wiki Welcome to Moonlight Design -- the personal web site of Henry Lamb and Steven Lawrance *[https://www.moonlightdesign.org/henry/ Henry Lamb] *[https://www.moonlightdesign.org/steve/ Steven Lawrance] This server also hosts several projects *[https://www.moonlightdesign.org/thunderforce/ Thunderforce] *[https://www.moonlightdesign.org/urllock/ URL Lock] *[https://www.moonlightdesign.org/dirlist/ DirList] *Teacher's Pet Firefox tab sharing extension (coming soon; extension is already written, but not posted online yet..) *[[Serendipity|Team Serendipity Master of Software Engineering (MSE) studio project]] *More to come.. 823293e45c8fe6b84e20f0c7a3e756b15b4bbd3d 1426 1421 2007-09-22T16:31:04Z Stevenlawrance 1 wikitext text/x-wiki Welcome to Moonlight Design -- the personal web site of Henry Lamb and Steven Lawrance *[[Henry Lamb]] *[[Steven Lawrance]] This server also hosts several projects *[https://www.moonlightdesign.org/thunderforce/ Thunderforce] *[https://www.moonlightdesign.org/urllock/ URL Lock] *[https://www.moonlightdesign.org/dirlist/ DirList] *Teacher's Pet Firefox tab sharing extension (coming soon; extension is already written, but not posted online yet..) *[[Serendipity|Team Serendipity Master of Software Engineering (MSE) studio project]] *More to come.. e351e2ae850412a35bbd032930b5dae1983dba52 Serendipity 0 1405 1409 2007-06-10T17:32:44Z Stevenlawrance 1 New page: <pre> Coming soon: Public files from the project that do not contain proprietary information, pending approval from the team members </pre> [[Serendipity Virtual Server]] wikitext text/x-wiki <pre> Coming soon: Public files from the project that do not contain proprietary information, pending approval from the team members </pre> [[Serendipity Virtual Server]] 288f649eb6dfaa8f0610cfe2c33bb014b14b3540 1411 1409 2007-06-10T17:48:54Z Stevenlawrance 1 wikitext text/x-wiki [[Serendipity Virtual Server]] ffcc0c870bf40778a3f74c2e05113ec49547fca8 1417 1411 2007-06-10T18:37:59Z Stevenlawrance 1 wikitext text/x-wiki [[Serendipity Virtual Server]] The files and documents related to Team Serendipity are proprietary to Team Serendipity and its corporate sponsor, so they will not be made public here. Instead, information related to the general virtual machine will exist in this wiki. 1566c111302b3180886d8479c74bc77494f32611 Serendipity Virtual Server 0 1406 1410 2007-06-10T17:48:27Z Stevenlawrance 1 New page: The Serendipity virtual server is a pre-configured Novell openSUSE 10.2 project server that is set up to be similar to how Team Serendipity's project server was originally set up. Its purp... wikitext text/x-wiki The Serendipity virtual server is a pre-configured Novell openSUSE 10.2 project server that is set up to be similar to how Team Serendipity's project server was originally set up. Its purpose is to ease the setup of new software projects by providing MediaWiki, Subversion, Bugzilla, WebDAV shared folders, and other technologies with AppArmor security and LDAP authentication integration out of the box using the easy-to-administrate YaST system configuration tool. Unfortunately, the DVDs that were sent out had a few bugs. These are addressed on this page. ==Version 1 Bugs and Solutions== *SerendipityServer.vmx file will not run in VMware Player on Windows **This was due to an oversight on my part. This file contained information that was specific to my computer's configuration, including the UUID and virtual Ethernet MAC address **[https://www.moonlightdesign.org/serendipity/SerendipityServer.vmx Download the fixed SerendipityServer.vmx file] and overwrite the existing file with the downloaded version d4ad90445a22807ac6675edf7a35110fc50d8778 1412 1410 2007-06-10T18:16:54Z Stevenlawrance 1 wikitext text/x-wiki The Serendipity virtual server is a pre-configured Novell openSUSE 10.2 project server that is set up to be similar to how Team Serendipity's project server was originally set up. Its purpose is to ease the setup of new software projects by providing MediaWiki, Subversion, Bugzilla, WebDAV shared folders, and other technologies with AppArmor security and LDAP authentication integration out of the box using the easy-to-administrate YaST system configuration tool. Unfortunately, the DVDs that were sent out had a few bugs. These are addressed on this page. ==Version 1 Bugs and Solutions== *'''SerendipityServer.vmx file will not run in VMware Player on Windows''' **This was due to an oversight on my part. This file contained information that was specific to my computer's configuration, including the UUID and virtual Ethernet MAC address **[https://www.moonlightdesign.org/serendipity/SerendipityServer.vmx Download the fixed SerendipityServer.vmx file] and overwrite the existing file with the downloaded version *'''Network connectivity might not work out of the box''' **If network connectivity does not work out of the box, then you might need to tell openSUSE to re-detect the network interface **To do this, run `yast2` in the terminal window **Click on the "Network Devices" category **Click on the "Network Card" item within the "Network Devices" category *'''ZMD uses extreme amounts of CPU and memory while updating''' **I had only recently found out that [http://en.opensuse.org/Users_FAQ#ZMD_is_mucked_up.21_What_should_I_do.3F it's possible to remove ZMD from openSUSE 10.2] to get faster and more reliable updates **To do this, run `yast2` in the terminal window **In YaST, select "Software Management" within the "Software" category **After the software management window finishes its start-up processing, type "zmd" into the "Search:" input box without the quotes and press the "Search" button **Right-click on zmd in the list, select "All in This List," and select "Delete" **Press the "Accept" button to commit these changes **In the conflict warning dialog box, select "delete zmd" and "delete zen-updater." Press the "OK -- Try Again" button **When asked, tell YaST that you don't want to install any more packages **In the YaST main window, select "Automatic Online Update" within the "Software" category **Press the "Finish" button. This will automatically update the /etc/cron.d/yast2-online-update file to run zypper instead of rug **Optionally, in the YaST main window, select "Online Update" within the "Software" category to ensure that your software is up-to-date interactively 2d6e3c7f6aac6c35b23eb865356fd61d67d25639 1413 1412 2007-06-10T18:25:02Z Stevenlawrance 1 /* Version 1 Bugs and Solutions */ wikitext text/x-wiki The Serendipity virtual server is a pre-configured Novell openSUSE 10.2 project server that is set up to be similar to how Team Serendipity's project server was originally set up. Its purpose is to ease the setup of new software projects by providing MediaWiki, Subversion, Bugzilla, WebDAV shared folders, and other technologies with AppArmor security and LDAP authentication integration out of the box using the easy-to-administrate YaST system configuration tool. Unfortunately, the DVDs that were sent out had a few bugs. These are addressed on this page. ==Version 1 Bugs and Solutions== *'''SerendipityServer.vmx file will not run in VMware Player on Windows''' **This was due to an oversight on my part. This file contained information that was specific to my computer's configuration, including the UUID and virtual Ethernet MAC address **[https://www.moonlightdesign.org/serendipity/SerendipityServer.vmx Download the fixed SerendipityServer.vmx file] and overwrite the existing file with the downloaded version *'''Network connectivity probably won't work out of the box''' **Unfortunately, I had forgotten to make the default network setup use DHCP instead of a static IP address **To fix this, run `yast2` in the terminal window **Click on the "Network Devices" category **Click on the "Network Card" item within the "Network Devices" category **Leave the "Network Setup Method" on "Traditional Method with ifup" and click the "Next" button **If you see a card that says "Not Configured," select that card and click on the "Edit" button. Otherwise, click on the card that lists "10.13.42.28" as its IP address and click on the "Edit" button **Select the "Automatic Address Setup (via DHCP)" option and click on the "Next" button **If any cards other than the one that you had just changed exist, then select one and click on the "Delete" button until only the one that you had configured remains **Click on the "Finish" button to commit this configuration. Network connectivity should now work properly. If it does not, try restarting the virtual machine by running `reboot` in the terminal window *'''ZMD uses extreme amounts of CPU and memory while updating''' **I had only recently found out that [http://en.opensuse.org/Users_FAQ#ZMD_is_mucked_up.21_What_should_I_do.3F it's possible to remove ZMD from openSUSE 10.2] to get faster and more reliable updates **To do this, run `yast2` in the terminal window **In YaST, select "Software Management" within the "Software" category **After the software management window finishes its start-up processing, type "zmd" into the "Search:" input box without the quotes and press the "Search" button **Right-click on zmd in the list, select "All in This List," and select "Delete" **Press the "Accept" button to commit these changes **In the conflict warning dialog box, select "delete zmd" and "delete zen-updater." Press the "OK -- Try Again" button **When asked, tell YaST that you don't want to install any more packages **In the YaST main window, select "Automatic Online Update" within the "Software" category **Press the "Finish" button. This will automatically update the /etc/cron.d/yast2-online-update file to run zypper instead of rug **Optionally, in the YaST main window, select "Online Update" within the "Software" category to ensure that your software is up-to-date interactively e3286e69d7d5aebad6cf4ad75510e16f0c886434 1414 1413 2007-06-10T18:27:13Z Stevenlawrance 1 /* Version 1 Bugs and Solutions */ wikitext text/x-wiki The Serendipity virtual server is a pre-configured Novell openSUSE 10.2 project server that is set up to be similar to how Team Serendipity's project server was originally set up. Its purpose is to ease the setup of new software projects by providing MediaWiki, Subversion, Bugzilla, WebDAV shared folders, and other technologies with AppArmor security and LDAP authentication integration out of the box using the easy-to-administrate YaST system configuration tool. Unfortunately, the DVDs that were sent out had a few bugs. These are addressed on this page. ==Version 1 Bugs and Solutions== *'''SerendipityServer.vmx file will not run in VMware Player on Windows''' **This was due to an oversight on my part. This file contained information that was specific to my computer's configuration, including the UUID and virtual Ethernet MAC address **[https://www.moonlightdesign.org/serendipity/SerendipityServer.vmx Download the fixed SerendipityServer.vmx file] and overwrite the existing file with the downloaded version *'''Network connectivity probably won't work out of the box''' **Unfortunately, I had forgotten to make the default network setup use DHCP instead of a static IP address **To fix this, run `yast2` in the terminal window **Click on the "Network Devices" category **Click on the "Network Card" item within the "Network Devices" category **Leave the "Network Setup Method" on "Traditional Method with ifup" and click the "Next" button **If you see a card that says "Not Configured," select that card and click on the "Edit" button. Otherwise, click on the card that lists "10.13.42.28" as its IP address and click on the "Edit" button **Select the "Automatic Address Setup (via DHCP)" option and click on the "Next" button **If any cards other than the one that you had just changed exist, then select one and click on the "Delete" button until only the one that you had configured remains **Click on the "Finish" button to commit this configuration. Network connectivity should now work properly. If it does not, try restarting the virtual machine by running `reboot` in the terminal window *'''ZMD uses extreme amounts of CPU and memory while updating''' **I had only recently found out that [http://en.opensuse.org/Users_FAQ#ZMD_is_mucked_up.21_What_should_I_do.3F it's possible to remove ZMD from openSUSE 10.2] to get faster and more reliable updates **To do this, run `yast2` in the terminal window **In YaST, select "Software Management" within the "Software" category **After the software management window finishes its start-up processing, type "zmd" into the "Search:" input box without the quotes and press the "Search" button **Right-click on zmd in the list, select "All in This List," and select "Delete" **Press the "Accept" button to commit these changes **In the conflict warning dialog box, select "delete zmd" and "delete zen-updater." Press the "OK -- Try Again" button **When asked, tell YaST that you don't want to install any more packages **In the YaST main window, select "Automatic Online Update" within the "Software" category **Press the "Finish" button. This will automatically update the /etc/cron.d/yast2-online-update file to run zypper instead of rug **Optionally, in the YaST main window, select "Online Update" within the "Software" category to ensure that your software is up-to-date interactively *'''The MediaWiki installation is an old version, and no automatic update is in place for it''' **I'll write this up soon a8577a7142ac457bc6143242ebadfa5e5fa3e795 1415 1414 2007-06-10T18:28:16Z Stevenlawrance 1 /* Version 1 Bugs and Solutions */ wikitext text/x-wiki The Serendipity virtual server is a pre-configured Novell openSUSE 10.2 project server that is set up to be similar to how Team Serendipity's project server was originally set up. Its purpose is to ease the setup of new software projects by providing MediaWiki, Subversion, Bugzilla, WebDAV shared folders, and other technologies with AppArmor security and LDAP authentication integration out of the box using the easy-to-administrate YaST system configuration tool. Unfortunately, the DVDs that were sent out had a few bugs. These are addressed on this page. ==Version 1 Bugs and Solutions== *'''SerendipityServer.vmx file will not run in VMware Player on Windows''' **This was due to an oversight on my part. This file contained information that was specific to my computer's configuration, including the UUID and virtual Ethernet MAC address **[https://www.moonlightdesign.org/serendipity/SerendipityServer.vmx Download the fixed SerendipityServer.vmx file] and overwrite the existing file with the downloaded version *'''Network connectivity probably won't work out of the box''' **Unfortunately, I had forgotten to make the default network setup use DHCP instead of a static IP address **To fix this, run `yast2` in the terminal window **Click on the "Network Devices" category **Click on the "Network Card" item within the "Network Devices" category **Leave the "Network Setup Method" on "Traditional Method with ifup" and click the "Next" button **If you see a card that says "Not Configured," select that card and click on the "Edit" button. Otherwise, click on the card that lists "10.13.42.28" as its IP address and click on the "Edit" button **Select the "Automatic Address Setup (via DHCP)" option and click on the "Next" button **If any cards other than the one that you had just changed exist, then select one and click on the "Delete" button until only the one that you had configured remains **Click on the "Finish" button to commit this configuration. Network connectivity should now work properly. If it does not, try restarting the virtual machine by running `reboot` in the terminal window *'''The ZENworks management daemon (ZMD) uses extreme amounts of CPU and memory while updating''' **I had only recently found out that [http://en.opensuse.org/Users_FAQ#ZMD_is_mucked_up.21_What_should_I_do.3F it's possible to remove ZMD from openSUSE 10.2] to get faster and more reliable updates **To do this, run `yast2` in the terminal window **In YaST, select "Software Management" within the "Software" category **After the software management window finishes its start-up processing, type "zmd" into the "Search:" input box without the quotes and press the "Search" button **Right-click on zmd in the list, select "All in This List," and select "Delete" **Press the "Accept" button to commit these changes **In the conflict warning dialog box, select "delete zmd" and "delete zen-updater." Press the "OK -- Try Again" button **When asked, tell YaST that you don't want to install any more packages **In the YaST main window, select "Automatic Online Update" within the "Software" category **Press the "Finish" button. This will automatically update the /etc/cron.d/yast2-online-update file to run zypper instead of rug **Optionally, in the YaST main window, select "Online Update" within the "Software" category to ensure that your software is up-to-date interactively *'''The MediaWiki installation is an old version, and no automatic update is in place for it''' **I'll write this up soon 279b63a15bef226a509610e3cf53f0e1661c071a 1418 1415 2007-06-10T18:46:33Z Stevenlawrance 1 /* Version 1 Bugs and Solutions */ wikitext text/x-wiki The Serendipity virtual server is a pre-configured Novell openSUSE 10.2 project server that is set up to be similar to how Team Serendipity's project server was originally set up. Its purpose is to ease the setup of new software projects by providing MediaWiki, Subversion, Bugzilla, WebDAV shared folders, and other technologies with AppArmor security and LDAP authentication integration out of the box using the easy-to-administrate YaST system configuration tool. Unfortunately, the DVDs that were sent out had a few bugs. These are addressed on this page. ==Version 1 Bugs and Solutions== *'''SerendipityServer.vmx file will not run in VMware Player on Windows out of the box''' **This was due to an oversight on my part. This file contained information that was specific to my computer's configuration, including the UUID and virtual Ethernet MAC address **[https://www.moonlightdesign.org/serendipity/SerendipityServer.vmx Download the fixed SerendipityServer.vmx file] and overwrite the existing file with the downloaded version *'''Network connectivity probably won't work out of the box''' **Unfortunately, I had forgotten to make the default network setup use DHCP instead of a static IP address **To fix this, run `yast2` in the terminal window **Click on the "Network Devices" category **Click on the "Network Card" item within the "Network Devices" category **Leave the "Network Setup Method" on "Traditional Method with ifup" and click the "Next" button **If you see a card that says "Not Configured," select that card and click on the "Edit" button. Otherwise, click on the card that lists "10.13.42.28" as its IP address and click on the "Edit" button **Select the "Automatic Address Setup (via DHCP)" option and click on the "Next" button **If any cards other than the one that you had just changed exist, then select one and click on the "Delete" button until only the one that you had configured remains **Click on the "Finish" button to commit this configuration. Network connectivity should now work properly. If it does not, try restarting the virtual machine by running `reboot` in the terminal window *'''The ZENworks management daemon (ZMD) uses extreme amounts of CPU and memory while updating''' **I had only recently found out that [http://en.opensuse.org/Users_FAQ#ZMD_is_mucked_up.21_What_should_I_do.3F it's possible to remove ZMD from openSUSE 10.2] to get faster and more reliable updates **To do this, run `yast2` in the terminal window **In YaST, select "Software Management" within the "Software" category **After the software management window finishes its start-up processing, type "zmd" into the "Search:" input box without the quotes and press the "Search" button **Right-click on zmd in the list, select "All in This List," and select "Delete" **Press the "Accept" button to commit these changes **In the conflict warning dialog box, select "delete zmd" and "delete zen-updater." Press the "OK -- Try Again" button **When asked, tell YaST that you don't want to install any more packages **In the YaST main window, select "Automatic Online Update" within the "Software" category **Press the "Finish" button. This will automatically update the /etc/cron.d/yast2-online-update file to run zypper instead of rug **Optionally, in the YaST main window, select "Online Update" within the "Software" category to ensure that your software is up-to-date interactively *'''The MediaWiki installation is an old version, and no automatic update is in place for it''' **I'll write this up soon f16576af9f1e5ee9489510ae87fcc5cfe08437c4 1419 1418 2007-06-10T18:46:51Z Stevenlawrance 1 /* Version 1 Bugs and Solutions */ wikitext text/x-wiki The Serendipity virtual server is a pre-configured Novell openSUSE 10.2 project server that is set up to be similar to how Team Serendipity's project server was originally set up. Its purpose is to ease the setup of new software projects by providing MediaWiki, Subversion, Bugzilla, WebDAV shared folders, and other technologies with AppArmor security and LDAP authentication integration out of the box using the easy-to-administrate YaST system configuration tool. Unfortunately, the DVDs that were sent out had a few bugs. These are addressed on this page. ==Version 1 Bugs and Solutions== *'''SerendipityServer.vmx file will not run in VMware Player out of the box''' **This was due to an oversight on my part. This file contained information that was specific to my computer's configuration, including the UUID and virtual Ethernet MAC address **[https://www.moonlightdesign.org/serendipity/SerendipityServer.vmx Download the fixed SerendipityServer.vmx file] and overwrite the existing file with the downloaded version *'''Network connectivity probably won't work out of the box''' **Unfortunately, I had forgotten to make the default network setup use DHCP instead of a static IP address **To fix this, run `yast2` in the terminal window **Click on the "Network Devices" category **Click on the "Network Card" item within the "Network Devices" category **Leave the "Network Setup Method" on "Traditional Method with ifup" and click the "Next" button **If you see a card that says "Not Configured," select that card and click on the "Edit" button. Otherwise, click on the card that lists "10.13.42.28" as its IP address and click on the "Edit" button **Select the "Automatic Address Setup (via DHCP)" option and click on the "Next" button **If any cards other than the one that you had just changed exist, then select one and click on the "Delete" button until only the one that you had configured remains **Click on the "Finish" button to commit this configuration. Network connectivity should now work properly. If it does not, try restarting the virtual machine by running `reboot` in the terminal window *'''The ZENworks management daemon (ZMD) uses extreme amounts of CPU and memory while updating''' **I had only recently found out that [http://en.opensuse.org/Users_FAQ#ZMD_is_mucked_up.21_What_should_I_do.3F it's possible to remove ZMD from openSUSE 10.2] to get faster and more reliable updates **To do this, run `yast2` in the terminal window **In YaST, select "Software Management" within the "Software" category **After the software management window finishes its start-up processing, type "zmd" into the "Search:" input box without the quotes and press the "Search" button **Right-click on zmd in the list, select "All in This List," and select "Delete" **Press the "Accept" button to commit these changes **In the conflict warning dialog box, select "delete zmd" and "delete zen-updater." Press the "OK -- Try Again" button **When asked, tell YaST that you don't want to install any more packages **In the YaST main window, select "Automatic Online Update" within the "Software" category **Press the "Finish" button. This will automatically update the /etc/cron.d/yast2-online-update file to run zypper instead of rug **Optionally, in the YaST main window, select "Online Update" within the "Software" category to ensure that your software is up-to-date interactively *'''The MediaWiki installation is an old version, and no automatic update is in place for it''' **I'll write this up soon 87f1ed01be48da207204d4afb5c8ac6986ad9cb0 1420 1419 2007-08-04T17:04:59Z Stevenlawrance 1 /* Version 1 Bugs and Solutions */ wikitext text/x-wiki The Serendipity virtual server is a pre-configured Novell openSUSE 10.2 project server that is set up to be similar to how Team Serendipity's project server was originally set up. Its purpose is to ease the setup of new software projects by providing MediaWiki, Subversion, Bugzilla, WebDAV shared folders, and other technologies with AppArmor security and LDAP authentication integration out of the box using the easy-to-administrate YaST system configuration tool. Unfortunately, the DVDs that were sent out had a few bugs. These are addressed on this page. ==Version 1 Bugs and Solutions== *'''SerendipityServer.vmx file will not run in VMware Player out of the box''' **This was due to an oversight on my part. This file contained information that was specific to my computer's configuration, including the UUID and virtual Ethernet MAC address **[https://www.moonlightdesign.org/serendipity/SerendipityServer.vmx Download the fixed SerendipityServer.vmx file] and overwrite the existing file with the downloaded version *'''Network connectivity probably won't work out of the box''' **Unfortunately, I had forgotten to make the default network setup use DHCP instead of a static IP address **To fix this, run `yast2` in the terminal window **Click on the "Network Devices" category **Click on the "Network Card" item within the "Network Devices" category **Leave the "Network Setup Method" on "Traditional Method with ifup" and click the "Next" button **If you see a card that says "Not Configured," select that card and click on the "Edit" button. Otherwise, click on the card that lists "10.13.42.28" as its IP address and click on the "Edit" button **Select the "Automatic Address Setup (via DHCP)" option and click on the "Next" button **If any cards other than the one that you had just changed exist, then select one and click on the "Delete" button until only the one that you had configured remains **Click on the "Finish" button to commit this configuration. Network connectivity should now work properly. If it does not, try restarting the virtual machine by running `reboot` in the terminal window *'''The ZENworks management daemon (ZMD) uses extreme amounts of CPU and memory while updating''' **I had only recently found out that [http://en.opensuse.org/Users_FAQ#ZMD_is_mucked_up.21_What_should_I_do.3F it's possible to remove ZMD from openSUSE 10.2] to get faster and more reliable updates **To do this, run `yast2` in the terminal window **In YaST, select "Software Management" within the "Software" category **After the software management window finishes its start-up processing, type "zmd" into the "Search:" input box without the quotes and press the "Search" button **Right-click on zmd in the list, select "All in This List," and select "Delete" **Press the "Accept" button to commit these changes **In the conflict warning dialog box, select "delete zmd" and "delete zen-updater." Press the "OK -- Try Again" button **When asked, tell YaST that you don't want to install any more packages **In the YaST main window, select "Automatic Online Update" within the "Software" category **Press the "Finish" button. This will automatically update the /etc/cron.d/yast2-online-update file to run zypper instead of rug **Optionally, in the YaST main window, select "Online Update" within the "Software" category to ensure that your software is up-to-date interactively *'''The MediaWiki installation is an old version, and no automatic update is in place for it''' **The MediaWiki installation on the DVD uses MediaWiki's CVS repository. They have switched to Subversion, so some extra work is required **Please let me know if you need this capability. I haven't had any free time to convert the old CVS version to the new Subversion MediaWiki repository, but I can elevate its priority if you need this. I already have the automatic upgrade scripts in place on this server, but they only work with the Subversion MediaWiki fe7d442a21e4dc272b99592a548bac8ea1e1e900 Henry Lamb 0 1407 1422 2007-09-22T15:57:54Z Stevenlawrance 1 New page: Content will be added soon wikitext text/x-wiki Content will be added soon e5474e333f2b5d90ebb33dc61b099f98c5ae1248 1423 1422 2007-09-22T15:59:52Z Stevenlawrance 1 [[Henry]] moved to [[Henry Lamb]]: Easier if it's the full name wikitext text/x-wiki Content will be added soon e5474e333f2b5d90ebb33dc61b099f98c5ae1248 Henry 0 1408 1424 2007-09-22T15:59:52Z Stevenlawrance 1 [[Henry]] moved to [[Henry Lamb]]: Easier if it's the full name wikitext text/x-wiki #REDIRECT [[Henry Lamb]] bad89b4c52ce84adf0e46835342c0454593814d2 Steven Lawrance 0 1409 1425 2007-09-22T16:30:58Z Stevenlawrance 1 New page: Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] Steven Lawrance. I enjoy building complete computing solutions at all levels of ... wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] Steven Lawrance. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. ==Interests and Consulting Services== I consider myself a "Steve of all trades," though all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. *Microsoft Windows to Linux computer and network migrations **Porting your or 3rd party Windows applications to Linux and Apple Mac OS X using Wine *Mozilla Firefox and Thunderbird extension development *Salesforce.com and Force.com solution development *Linux, Apache, MySQL, and PHP (LAMP) solution development *Java application development using SWING or SWT *Linux server configuration and maintenance *Middleware software development *Custom software development *Calendaring solutions *Building and home automation *Business process metrics, measurements, and analysis ==Experience== ==Training== 71c4ec24c039881c47a5b08903f542a9265dddc3 1429 1425 2007-09-22T17:16:20Z Stevenlawrance 1 /* Interests and Consulting Services */ wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] Steven Lawrance. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. ==Interests and Consulting Services== I consider myself a "Steve of all trades," though all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" |- |valign="top"|<center>'''Microsoft Windows to Linux computer and network migrations'''</center> <center>[[Image:Windows-to-linux.png]]</center> *Cost effectiveness assessments *Project planning *Migration execution *Profile migrations using HomeProfiler *Porting your or 3rd party Windows applications to Linux using Wine |valign="top"|<center>'''Mozilla Firefox and Thunderbird extension development'''</center> <center>[[Image:Firefox-and-thunderbird.png]]</center> *Thunderforce *Teacher's Pet *URL Lock |- | *Salesforce.com and Force.com solution development *Linux, Apache, MySQL, and PHP (LAMP) solution development *Java application development using SWING or SWT *Linux server configuration and maintenance *Middleware software development *Custom software development *Calendaring solutions *Building and home automation *Business process metrics, measurements, and analysis |} ==Experience== ==Training== bf7e557c1e409519b07d7f8b14486689895833bd 1436 1429 2007-09-22T18:01:14Z Stevenlawrance 1 /* Interests and Consulting Services */ wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] Steven Lawrance. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. ==Interests and Consulting Services== I consider myself a "Steve of all trades," though all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" |- |valign="top"|<center>'''Microsoft Windows to Linux computer and network migrations'''</center> <center>[[Image:Windows-to-linux.png]]</center> *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[HomeProfiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |valign="top"|<center>'''Mozilla Thunderbird and Firefox extension development'''</center> <center>[[Image:Firefox-and-thunderbird.png]]</center> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |- |valign="top"|<center>'''Salesforce.com and Force.com solution development'''</center> <center>[[Image:Salesforce.png]]</center> *Online business applications *Linux desktop application integrations *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] |valign="top"|<center>'''Linux, Apache, MySQL, and PHP (LAMP) solution development'''</center> <center>[[Image:Lamp.png]]</center> |- |valign="top"|'''Java application development using SWING or SWT''' |valign="top"|'''Linux server configuration and maintenance''' |- |valign="top"|'''Custom software development''' *Middleware software development *Custom software development *Calendaring solutions *Software process metrics, measurements, and analysis |valign="top"|'''Building and home automation''' |} ==Experience== ==Training== 13f42fb8f1e10f2ab138fd719a406f3179a25b58 1437 1436 2007-09-22T18:02:49Z Stevenlawrance 1 wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] Steven Lawrance. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-23'''</big> ==Interests and Consulting Services== I consider myself a "Steve of all trades," though all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" |- |valign="top"|<center>'''Microsoft Windows to Linux computer and network migrations'''</center> <center>[[Image:Windows-to-linux.png]]</center> *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[HomeProfiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |valign="top"|<center>'''Mozilla Thunderbird and Firefox extension development'''</center> <center>[[Image:Firefox-and-thunderbird.png]]</center> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |- |valign="top"|<center>'''Salesforce.com and Force.com solution development'''</center> <center>[[Image:Salesforce.png]]</center> *Online business applications *Linux desktop application integrations *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] |valign="top"|<center>'''Linux, Apache, MySQL, and PHP (LAMP) solution development'''</center> <center>[[Image:Lamp.png]]</center> |- |valign="top"|'''Java application development using SWING or SWT''' |valign="top"|'''Linux server configuration and maintenance''' |- |valign="top"|'''Custom software development''' *Middleware software development *Custom software development *Calendaring solutions *Software process metrics, measurements, and analysis |valign="top"|'''Building and home automation''' |} ==Experience== ==Training== 2d3b41dc2ade3f40dfc5fba75598b5049ab1656a 1440 1437 2007-09-22T20:56:40Z Stevenlawrance 1 wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] Steven Lawrance. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-23'''</big> ==Interests and Consulting Services== I consider myself a "Steve of all trades," though all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|'''Microsoft Windows to Linux computer and network migrations''' [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[HomeProfiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |valign="top" width="50%"|'''Mozilla Thunderbird and Firefox extension development''' *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |- |valign="top" width="50%"|'''Salesforce.com and Force.com solution development''' *Online business applications *Linux desktop application integrations *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] |valign="top" width="50%"|'''Linux, Apache, MySQL, and PHP (LAMP) solution development''' *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|'''Java application development''' *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|'''Linux server configuration and maintenance''' *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |- |valign="top" width="50%"|'''Custom software development''' *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|'''Building and home automation''' *Computer-based electrical device control *[[Home Control]] |} ==Experience== ==Training== d1424aa16f45ecd2aa96d3d667a5713307a366ea 1441 1440 2007-09-22T21:07:18Z Stevenlawrance 1 wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-23'''</big> ==Interests and Consulting Services== I consider myself a "Steve of all trades," though all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|'''Microsoft Windows to Linux computer and network migrations''' [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[HomeProfiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |valign="top" width="50%"|'''Mozilla Thunderbird and Firefox extension development''' *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |- |valign="top" width="50%"|'''Custom software development''' *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|'''Linux, Apache, MySQL, and PHP (LAMP) solution development''' *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|'''Java application development''' *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|'''Linux server configuration and maintenance''' *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |- |valign="top" width="50%"|'''Salesforce.com and Force.com solution development''' *Online business applications *Linux desktop application integrations *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] |valign="top" width="50%"|'''Building and home automation''' *Computer-based electrical device control *[[Home Control]] |} ==Experience== ==Training== 3565754ad05252a3cf2f4c2cb653f4b9e11714e9 1442 1441 2007-09-22T21:19:21Z Stevenlawrance 1 wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-23'''</big> ==Interests and Consulting Services== I consider myself a "Steve of all trades," though all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|'''Microsoft Windows to Linux computer and network migrations''' [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[HomeProfiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |valign="top" width="50%"|'''Mozilla Thunderbird and Firefox extension development''' *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |- |valign="top" width="50%"|'''Custom software development''' *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|'''Linux, Apache, MySQL, and PHP (LAMP) solution development''' *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|'''Java application development''' *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|'''Linux server configuration and maintenance''' *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |- |valign="top" width="50%"|'''Salesforce.com and Force.com solution development''' *Online business applications *Linux desktop application integrations *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] |valign="top" width="50%"|'''Building and home automation''' *Computer-based electrical device control *[[Home Control]] |} ==Experience== {| border="1" cellpadding="5" |- |valign="top" width="50%"|'''Microsoft Windows to Linux computer and network migrations''' *Profile migrations using [[HomeProfiler]] *Use of desktop Linux at home and at work since 1998 *Use of the Linux VMware Workstation since the first beta version |valign="top" width="50%"|'''Mozilla Thunderbird and Firefox extension development''' *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |- |valign="top" width="50%"|'''Custom software development''' *This section will list a lot of software.. |valign="top" width="50%"|'''Linux, Apache, MySQL, and PHP (LAMP) solution development''' *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|'''Java application development''' *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|'''Linux server configuration and maintenance''' *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |- |valign="top" width="50%"|'''Salesforce.com and Force.com solution development''' *Online business applications *Linux desktop application integrations *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] |valign="top" width="50%"|'''Building and home automation''' *Computer-based electrical device control *[[Home Control]] |} ==Training== bfe1b919f1820b916a23ef7892e112dd21ab863c 1445 1442 2007-09-23T00:42:42Z Stevenlawrance 1 wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-23'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|'''Mozilla Thunderbird and Firefox extension development''' *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|'''Microsoft Windows to Linux computer and network migrations''' [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[HomeProfiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|'''Custom software development''' *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|'''Linux, Apache, MySQL, and PHP (LAMP) solution development''' *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|'''Java application development''' *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|'''Linux server configuration and maintenance''' *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |- |valign="top" width="50%"|'''Building and home automation''' *Computer-based electrical device control *[[Home Control]] | |} ==Experience== ===Software that I created=== {|class="software" |class="software"|DirList2||A CGI-based specialized database system with a powerful query structure and user-based security that I wrote myself. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |class="software"|FAT Recover||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |class="software"|Ariesbase||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its Ariesbase intranet system. I mostly helped out with the backend functionality such as the security system and global includes. Ariesbase was written in PHP and is an ongoing project that will take another couple years to fully develop |- |class="software"|Bryant PRIDE||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |class="software"|ResNet Online||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |class="software"|ActiveMail||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |class="software"|CPU ID||A very simple program that returns info on the CPU that it happens to execute on |- |class="software"|DirList2ODBC||ODBC 2.0-compliant driver written for the DirList2 Server |- |class="software"|Disk Imager||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |class="software"|EzMIDI32||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |class="software"|Home Control||The project that marked my first significant work towards complete home and office automation systems |- |class="software"|LPD||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |class="software"|PortProxy||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |class="software"|ScreenWindowX||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |class="software"|Trig Grapher||My first multithreaded Win32 program that I wrote in high school for fun |- |class="software"|256-Color SDK||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |class="software"|AudioCD Pictures||Displays predefined pictures as a playing CD reaches predefined moments |- |class="software"|BBS Ads||Simply a program that can advertise bulletin board systems, when they used to be popular |- |class="software"|Bids-to-ASP||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |class="software"|CatSetup16||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |class="software"|Horses||A fun horse racing game that I made a long time ago |- |class="software"|KittyCat! Comm||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |class="software"|MCI SendString||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |class="software"|MeowyMIDI||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |class="software"|PCL Page||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |class="software"|ScreenWindow||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |class="software"|SLOS-Win||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |class="software"|AriesType||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |class="software"|GlobalXMS||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |class="software"|IntMap||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |class="software"|Jingle Bells||A musical project that I did during the first year of Computer Science in high school |- |class="software"|SLOS-DOS||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |class="software"|TSNHead||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |class="software"|Animation Master||Really lame animation program that I made for SLOS |- |class="software"|FAT Checker||Think of it as a /sbin/fsck for SLOS FATs |- |class="software"|SLOS Modem||File transfer utility for SLOS and DOS |- |class="software"|TrackTrek||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |} ===Software that I heavily contributed to=== {|border="0" |fwefwe |} ===Software that I contributed to=== {|border="0" |class="software"|Pan||Contributed a small bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |class="software"|PHP||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |class="software"|Spruce||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |class="software"|Bryant University||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |} ==Training== 195320b58d397a2543ef8ed5f0d7d5c6933bb96a File:Windows-to-linux.png 6 1410 1427 2007-09-22T16:58:49Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Firefox-and-thunderbird.png 6 1411 1428 2007-09-22T17:14:18Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 1430 1428 2007-09-22T17:20:40Z Stevenlawrance 1 uploaded a new version of "[[Image:Firefox-and-thunderbird.png]]" wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 1431 1430 2007-09-22T17:23:48Z Stevenlawrance 1 uploaded a new version of "[[Image:Firefox-and-thunderbird.png]]" wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Salesforce.png 6 1412 1432 2007-09-22T17:34:21Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Lamp.png 6 1413 1433 2007-09-22T17:52:29Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 1434 1433 2007-09-22T17:54:27Z Stevenlawrance 1 uploaded a new version of "[[Image:Lamp.png]]": Combination of the following images, which are copyright and trademarked by their respective entities: http://en.wikipedia.org/wiki/Image:Apache_HTTPD.gif http://www.isc.tamu.edu/~lewing/linux/sit3-shine.7. wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 1435 1434 2007-09-22T17:59:41Z Stevenlawrance 1 uploaded a new version of "[[Image:Lamp.png]]" wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Tux.png 6 1414 1438 2007-09-22T20:27:10Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Linux server services 0 1415 1439 2007-09-22T20:56:28Z Stevenlawrance 1 New page: **Apache HTTP server 2.0, 2.2, including mod_rewrite **Novell AppArmor security **Squid web proxy server, including reporting extensions **OpenLDAP directory server **MySQL database server... wikitext text/x-wiki **Apache HTTP server 2.0, 2.2, including mod_rewrite **Novell AppArmor security **Squid web proxy server, including reporting extensions **OpenLDAP directory server **MySQL database server **Postfox, Cyrus IMAPd, and SpamAssassin for email **CUPS for printing **GNU Mailman email list server **NTP and Samba file sharing **Mozilla Bugzilla **OpenRADUIS authentication server e89fbee52d5d58a1ab172b5e9bb551b518535b7f MediaWiki:Monobook.css 8 1416 1443 2007-09-23T00:39:41Z Stevenlawrance 1 New page: /* CSS placed here will affect users of the Monobook skin */ table.software { border: 0; } table.td { background-color: #555555; } css text/css /* CSS placed here will affect users of the Monobook skin */ table.software { border: 0; } table.td { background-color: #555555; } 55029533bb49148c2f28d2316021d8acf055dfe3 1444 1443 2007-09-23T00:40:14Z Stevenlawrance 1 css text/css /* CSS placed here will affect users of the Monobook skin */ table.software { border: 0; } td.software { background-color: #555555; } c87f516d98734239a96caf5d40cbcdf8d2b2e031 1446 1444 2007-09-23T00:43:42Z Stevenlawrance 1 css text/css /* CSS placed here will affect users of the Monobook skin */ table.software { border: 0; } td.software { vertical-align: "top"; font-weight: "bold"; } 278d5ccc79aff4145a8403663c5e0f9afb6fb0de 1447 1446 2007-09-23T00:44:26Z Stevenlawrance 1 css text/css /* CSS placed here will affect users of the Monobook skin */ table.software { border: 0; } td.software { vertical-align: top; font-weight: bold; } 06c417b49f51e6de3baaf1b11c06a90331b8f373 1448 1447 2007-09-23T00:45:09Z Stevenlawrance 1 css text/css /* CSS placed here will affect users of the Monobook skin */ table.software { border: 0; } td.software { vertical-align: top; padding-right: 3em; } 3131180481757bf642d01ebe6fe974f3cf507f82 1449 1448 2007-09-23T00:45:50Z Stevenlawrance 1 css text/css /* CSS placed here will affect users of the Monobook skin */ table.software { border: 0; } td.software { vertical-align: top; padding-right: 1em; } fb14ea06b4feef2f6e4e594320c844549d69e011 1450 1449 2007-09-23T00:48:16Z Stevenlawrance 1 css text/css /* CSS placed here will affect users of the Monobook skin */ table.software { border: 1; } td.software { vertical-align: top; padding-right: 1em; } 6c35ae0f69b7df637d84f699a37900102e3f9963 1451 1450 2007-09-23T00:50:29Z Stevenlawrance 1 css text/css /* CSS placed here will affect users of the Monobook skin */ table.software { border: medium; } td.software { vertical-align: top; padding-right: 1em; } 95db3b6c11062f755bfde589bc450a1b487728d7 1452 1451 2007-09-23T00:53:31Z Stevenlawrance 1 css text/css /* CSS placed here will affect users of the Monobook skin */ table.software { border-width: 1px 1px 1px 1px; border-spacing: 0px; border-style: outset outset outset outset; border-color: black black black black; border-collapse: separate; background-color: white; } td.software { vertical-align: top; padding-right: 1em; } dd98cd04fe69c1d64ccf7a66b47f91449f46f134 1453 1452 2007-09-23T01:02:12Z Stevenlawrance 1 css text/css /* CSS placed here will affect users of the Monobook skin */ table.software { border-width: 1px 1px 1px 1px; border-spacing: 0px; border-style: outset outset outset outset; border-color: black black black black; border-collapse: separate; background-color: white; } td.software { vertical-align: top; padding-right: 1em; } tr.grayrow { background-color: #222222; } 2ecf68a462ad68ff9a48fb87c5b8164895fe422f MediaWiki:Monobook.css 8 1416 1454 1453 2007-09-23T01:04:47Z Stevenlawrance 1 css text/css /* CSS placed here will affect users of the Monobook skin */ table.software { border-width: 1px 1px 1px 1px; border-spacing: 0px; border-style: outset outset outset outset; border-color: black black black black; border-collapse: separate; background-color: white; } td.software { vertical-align: top; padding-right: 1em; border-width: 0px 0px 0px 1px; border-style: inset inset inset inset; border-color: gray gray gray gray; background-color: white; } tr.grayrow { background-color: #dddddd; } 0fe5261f2d587464629414d374c0e18c01c11e8e 1455 1454 2007-09-23T01:05:34Z Stevenlawrance 1 css text/css /* CSS placed here will affect users of the Monobook skin */ table.software { border-width: 1px 1px 1px 1px; border-spacing: 0px; border-style: outset outset outset outset; border-color: black black black black; border-collapse: separate; background-color: white; } td.software { vertical-align: top; padding-right: 1em; border-width: 0px 0px 1px 0px; border-style: inset inset inset inset; border-color: gray gray gray gray; } tr.grayrow { background-color: #dddddd; } 69eab7acf0f2ab948c7ac41145802a28a92810a0 1456 1455 2007-09-23T01:06:09Z Stevenlawrance 1 css text/css /* CSS placed here will affect users of the Monobook skin */ table.software { border-width: 1px 1px 1px 1px; border-spacing: 0px; border-style: outset outset outset outset; border-color: black black black black; border-collapse: separate; background-color: white; } td.software { vertical-align: top; padding-right: 1em; border-width: 0px 1px 0px 0px; border-style: inset inset inset inset; border-color: gray black gray gray; } tr.grayrow { background-color: #dddddd; } 6600c082922f658e58976620fc14ff8697aafc14 1458 1456 2007-09-23T01:07:33Z Stevenlawrance 1 css text/css /* CSS placed here will affect users of the Monobook skin */ table.software { border-width: 1px 1px 1px 1px; border-spacing: 0px; border-style: outset outset outset outset; border-color: black black black black; border-collapse: separate; background-color: white; } td.software { vertical-align: top; padding-right: 1em; border-width: 0px 1px 0px 0px; border-style: inset inset inset inset; border-color: gray black gray gray; } tr.grayrow { background-color: #eeeeee; } 5e1e4060f3210b38fdff019c439bba940b53bb04 1459 1458 2007-09-23T01:08:07Z Stevenlawrance 1 css text/css /* CSS placed here will affect users of the Monobook skin */ table.software { border-width: 1px 1px 1px 1px; border-spacing: 0px; border-style: outset outset outset outset; border-color: black black black black; border-collapse: separate; background-color: white; } td.software { vertical-align: top; padding-right: 1em; border-width: 0px 1px 0px 0px; border-style: inset inset inset inset; border-color: gray black gray gray; } tr.grayrow { background-color: #e3e3e3; } 850770c746b9acb284a260bb3aaefba05d635368 1477 1459 2007-09-23T02:52:15Z Stevenlawrance 1 css text/css /* CSS placed here will affect users of the Monobook skin */ table.software { border-width: 1px 1px 1px 1px; border-spacing: 0px; border-style: outset outset outset outset; border-color: black black black black; border-collapse: separate; background-color: white; } table.software > td { vertical-align: top; padding-right: 1em; border-width: 0px 1px 0px 0px; border-style: inset inset inset inset; border-color: gray black gray gray; } tr.grayrow { background-color: #e3e3e3; } a26e291931b33423d1dcd5a3f0b18bce79d83343 1478 1477 2007-09-23T02:54:24Z Stevenlawrance 1 css text/css /* CSS placed here will affect users of the Monobook skin */ table.software { border-width: 1px 1px 1px 1px; border-spacing: 0px; border-style: outset outset outset outset; border-color: black black black black; border-collapse: separate; background-color: white; } table.software td { vertical-align: top; padding-right: 1em; border-width: 0px 1px 0px 0px; border-style: inset inset inset inset; border-color: gray black gray gray; } tr.grayrow { background-color: #e3e3e3; } 103e8842875911b7669e13b1bb6193cf76a8bbf7 1479 1478 2007-09-23T02:55:41Z Stevenlawrance 1 css text/css /* CSS placed here will affect users of the Monobook skin */ table.software { border-width: 1px 1px 1px 1px; border-spacing: 0px; border-style: outset outset outset outset; border-color: black black black black; border-collapse: separate; background-color: white; } table.software td:first-child { vertical-align: top; padding-right: 1em; border-width: 0px 1px 0px 0px; border-style: inset inset inset inset; border-color: gray black gray gray; } tr.grayrow { background-color: #e3e3e3; } 0bc853e1510e5f41e0a2d2e438241cb008716a92 1484 1479 2007-09-23T03:34:57Z Stevenlawrance 1 css text/css /* CSS placed here will affect users of the Monobook skin */ c80e68799afe5db6daf381b96bd702ff641b8092 Steven Lawrance 0 1409 1457 1445 2007-09-23T01:07:18Z Stevenlawrance 1 wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-23'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|'''Mozilla Thunderbird and Firefox extension development''' *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|'''Microsoft Windows to Linux computer and network migrations''' [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[HomeProfiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|'''Custom software development''' *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|'''Linux, Apache, MySQL, and PHP (LAMP) solution development''' *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|'''Java application development''' *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|'''Linux server configuration and maintenance''' *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |- |valign="top" width="50%"|'''Building and home automation''' *Computer-based electrical device control *[[Home Control]] | |} ==Experience== ===Software that I created=== {|class="software" |class="software"|DirList2||A CGI-based specialized database system with a powerful query structure and user-based security that I wrote myself. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- class="grayrow" |class="software"|FAT Recover||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |class="software"|Ariesbase||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its Ariesbase intranet system. I mostly helped out with the backend functionality such as the security system and global includes. Ariesbase was written in PHP and is an ongoing project that will take another couple years to fully develop |- class="grayrow" |class="software"|Bryant PRIDE||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |class="software"|ResNet Online||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- class="grayrow" |class="software"|ActiveMail||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |class="software"|CPU ID||A very simple program that returns info on the CPU that it happens to execute on |- class="grayrow" |class="software"|DirList2ODBC||ODBC 2.0-compliant driver written for the DirList2 Server |- |class="software"|Disk Imager||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- class="grayrow" |class="software"|EzMIDI32||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |class="software"|Home Control||The project that marked my first significant work towards complete home and office automation systems |- class="grayrow" |class="software"|LPD||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |class="software"|PortProxy||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- class="grayrow" |class="software"|ScreenWindowX||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |class="software"|Trig Grapher||My first multithreaded Win32 program that I wrote in high school for fun |- class="grayrow" |class="software"|256-Color SDK||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |class="software"|AudioCD Pictures||Displays predefined pictures as a playing CD reaches predefined moments |- class="grayrow" |class="software"|BBS Ads||Simply a program that can advertise bulletin board systems, when they used to be popular |- |class="software"|Bids-to-ASP||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- class="grayrow" |class="software"|CatSetup16||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |class="software"|Horses||A fun horse racing game that I made a long time ago |- class="grayrow" |class="software"|KittyCat! Comm||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |class="software"|MCI SendString||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- class="grayrow" |class="software"|MeowyMIDI||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |class="software"|PCL Page||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- class="grayrow" |class="software"|ScreenWindow||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |class="software"|SLOS-Win||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- class="grayrow" |class="software"|AriesType||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |class="software"|GlobalXMS||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- class="grayrow" |class="software"|IntMap||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |class="software"|Jingle Bells||A musical project that I did during the first year of Computer Science in high school |- class="grayrow" |class="software"|SLOS-DOS||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |class="software"|TSNHead||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- class="grayrow" |class="software"|Animation Master||Really lame animation program that I made for SLOS |- |class="software"|FAT Checker||Think of it as a /sbin/fsck for SLOS FATs |- class="grayrow" |class="software"|SLOS Modem||File transfer utility for SLOS and DOS |- |class="software"|TrackTrek||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |} ===Software that I heavily contributed to=== {| |fwefwe |} ===Software that I contributed to=== {|class="software" |class="software"|Pan||Contributed a small bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- class="grayrow" |class="software"|PHP||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |class="software"|Spruce||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- class="grayrow" |class="software"|Bryant University||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |} ==Training== 642033fe74326cc0a88832cddf3a533f31fb4d22 1460 1457 2007-09-23T01:21:34Z Stevenlawrance 1 wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-23'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|'''Mozilla Thunderbird and Firefox extension development''' *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|'''Microsoft Windows to Linux computer and network migrations''' [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[HomeProfiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|'''Custom software development''' *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|'''Linux, Apache, MySQL, and PHP (LAMP) solution development''' *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|'''Java application development''' *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|'''Linux server configuration and maintenance''' *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |- |valign="top" width="50%"|'''Building and home automation''' *Computer-based electrical device control *[[Home Control]] | |} ==Experience== ===Software that I created=== {|class="software" |- |class="software"|[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- class="grayrow" |class="software"|[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |class="software"|[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- class="grayrow" |class="software"|[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |class="software"|[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- class="grayrow" |class="software"|[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |class="software"|[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its Ariesbase intranet system. I mostly helped out with the backend functionality such as the security system and global includes. Ariesbase was written in PHP and is an ongoing project that will take another couple years to fully develop |- class="grayrow" |class="software"|[[Bryant PRIDE]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |class="software"|[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- class="grayrow" |class="software"|[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |class="software"|[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- class="grayrow" |class="software"|[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |class="software"|[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- class="grayrow" |class="software"|[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |class="software"|[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- class="grayrow" |class="software"|[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |class="software"|[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- class="grayrow" |class="software"|[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |class="software"|[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- class="grayrow" |class="software"|[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |class="software"|[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- class="grayrow" |class="software"|[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |class="software"|[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- class="grayrow" |class="software"|[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |class="software"|[[Horses]]||A fun horse racing game that I made a long time ago |- class="grayrow" |class="software"|[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |class="software"|[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- class="grayrow" |class="software"|[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |class="software"|[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- class="grayrow" |class="software"|[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |class="software"|[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- class="grayrow" |class="software"|[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |class="software"|[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- class="grayrow" |class="software"|[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |class="software"|[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- class="grayrow" |class="software"|[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |class="software"|[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- class="grayrow" |class="software"|[[Animation Master]]||Really lame animation program that I made for SLOS |- |class="software"|[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- class="grayrow" |class="software"|[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |class="software"|[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- class="grayrow" |class="software"|[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} ===Software that I heavily contributed to=== {|class="software" | |} ===Software that I contributed to=== {|class="software" |class="software"|Pan||Contributed a small bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- class="grayrow" |class="software"|PHP||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |class="software"|Spruce||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- class="grayrow" |class="software"|Bryant University||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |} ==Training== 9c1ac233ab2c01a1df56997bd4c697b7c2d6d238 1461 1460 2007-09-23T01:26:48Z Stevenlawrance 1 /* Software that I contributed to */ wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-23'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|'''Mozilla Thunderbird and Firefox extension development''' *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|'''Microsoft Windows to Linux computer and network migrations''' [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[HomeProfiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|'''Custom software development''' *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|'''Linux, Apache, MySQL, and PHP (LAMP) solution development''' *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|'''Java application development''' *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|'''Linux server configuration and maintenance''' *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |- |valign="top" width="50%"|'''Building and home automation''' *Computer-based electrical device control *[[Home Control]] | |} ==Experience== ===Software that I created=== {|class="software" |- |class="software"|[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- class="grayrow" |class="software"|[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |class="software"|[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- class="grayrow" |class="software"|[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |class="software"|[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- class="grayrow" |class="software"|[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |class="software"|[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its Ariesbase intranet system. I mostly helped out with the backend functionality such as the security system and global includes. Ariesbase was written in PHP and is an ongoing project that will take another couple years to fully develop |- class="grayrow" |class="software"|[[Bryant PRIDE]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |class="software"|[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- class="grayrow" |class="software"|[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |class="software"|[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- class="grayrow" |class="software"|[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |class="software"|[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- class="grayrow" |class="software"|[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |class="software"|[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- class="grayrow" |class="software"|[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |class="software"|[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- class="grayrow" |class="software"|[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |class="software"|[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- class="grayrow" |class="software"|[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |class="software"|[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- class="grayrow" |class="software"|[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |class="software"|[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- class="grayrow" |class="software"|[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |class="software"|[[Horses]]||A fun horse racing game that I made a long time ago |- class="grayrow" |class="software"|[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |class="software"|[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- class="grayrow" |class="software"|[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |class="software"|[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- class="grayrow" |class="software"|[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |class="software"|[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- class="grayrow" |class="software"|[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |class="software"|[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- class="grayrow" |class="software"|[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |class="software"|[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- class="grayrow" |class="software"|[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |class="software"|[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- class="grayrow" |class="software"|[[Animation Master]]||Really lame animation program that I made for SLOS |- |class="software"|[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- class="grayrow" |class="software"|[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |class="software"|[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- class="grayrow" |class="software"|[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} ===Software that I heavily contributed to=== {|class="software" | |} ===Software that I contributed to=== {|class="software" |class="software"|Mozilla||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- class="grayrow" |class="software"|Samba||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |class="software"|Pan||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- class="grayrow" |class="software"|PHP||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |class="software"|Spruce||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- class="grayrow" |class="software"|Bryant University||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |} ==Training== b5f8bfd52091dd4cd422adaca0c0b521e9ba5668 1462 1461 2007-09-23T01:28:58Z Stevenlawrance 1 /* Software that I contributed to */ wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-23'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|'''Mozilla Thunderbird and Firefox extension development''' *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|'''Microsoft Windows to Linux computer and network migrations''' [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[HomeProfiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|'''Custom software development''' *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|'''Linux, Apache, MySQL, and PHP (LAMP) solution development''' *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|'''Java application development''' *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|'''Linux server configuration and maintenance''' *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |- |valign="top" width="50%"|'''Building and home automation''' *Computer-based electrical device control *[[Home Control]] | |} ==Experience== ===Software that I created=== {|class="software" |- |class="software"|[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- class="grayrow" |class="software"|[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |class="software"|[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- class="grayrow" |class="software"|[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |class="software"|[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- class="grayrow" |class="software"|[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |class="software"|[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its Ariesbase intranet system. I mostly helped out with the backend functionality such as the security system and global includes. Ariesbase was written in PHP and is an ongoing project that will take another couple years to fully develop |- class="grayrow" |class="software"|[[Bryant PRIDE]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |class="software"|[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- class="grayrow" |class="software"|[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |class="software"|[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- class="grayrow" |class="software"|[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |class="software"|[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- class="grayrow" |class="software"|[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |class="software"|[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- class="grayrow" |class="software"|[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |class="software"|[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- class="grayrow" |class="software"|[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |class="software"|[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- class="grayrow" |class="software"|[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |class="software"|[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- class="grayrow" |class="software"|[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |class="software"|[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- class="grayrow" |class="software"|[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |class="software"|[[Horses]]||A fun horse racing game that I made a long time ago |- class="grayrow" |class="software"|[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |class="software"|[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- class="grayrow" |class="software"|[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |class="software"|[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- class="grayrow" |class="software"|[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |class="software"|[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- class="grayrow" |class="software"|[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |class="software"|[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- class="grayrow" |class="software"|[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |class="software"|[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- class="grayrow" |class="software"|[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |class="software"|[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- class="grayrow" |class="software"|[[Animation Master]]||Really lame animation program that I made for SLOS |- |class="software"|[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- class="grayrow" |class="software"|[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |class="software"|[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- class="grayrow" |class="software"|[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} ===Software that I heavily contributed to=== {|class="software" | |} ===Software that I contributed to=== {|class="software" |class="software"|[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- class="grayrow" |class="software"|[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |class="software"|[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- class="grayrow" |class="software"|[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |class="software"|[[Spruce]]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- class="grayrow" |class="software"|[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |} ==Training== d8c504119cf86c64dd8615e185820306818ea79c 1463 1462 2007-09-23T01:30:50Z Stevenlawrance 1 /* Software that I contributed to */ wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-23'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|'''Mozilla Thunderbird and Firefox extension development''' *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|'''Microsoft Windows to Linux computer and network migrations''' [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[HomeProfiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|'''Custom software development''' *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|'''Linux, Apache, MySQL, and PHP (LAMP) solution development''' *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|'''Java application development''' *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|'''Linux server configuration and maintenance''' *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |- |valign="top" width="50%"|'''Building and home automation''' *Computer-based electrical device control *[[Home Control]] | |} ==Experience== ===Software that I created=== {|class="software" |- |class="software"|[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- class="grayrow" |class="software"|[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |class="software"|[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- class="grayrow" |class="software"|[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |class="software"|[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- class="grayrow" |class="software"|[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |class="software"|[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its Ariesbase intranet system. I mostly helped out with the backend functionality such as the security system and global includes. Ariesbase was written in PHP and is an ongoing project that will take another couple years to fully develop |- class="grayrow" |class="software"|[[Bryant PRIDE]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |class="software"|[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- class="grayrow" |class="software"|[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |class="software"|[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- class="grayrow" |class="software"|[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |class="software"|[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- class="grayrow" |class="software"|[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |class="software"|[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- class="grayrow" |class="software"|[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |class="software"|[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- class="grayrow" |class="software"|[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |class="software"|[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- class="grayrow" |class="software"|[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |class="software"|[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- class="grayrow" |class="software"|[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |class="software"|[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- class="grayrow" |class="software"|[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |class="software"|[[Horses]]||A fun horse racing game that I made a long time ago |- class="grayrow" |class="software"|[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |class="software"|[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- class="grayrow" |class="software"|[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |class="software"|[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- class="grayrow" |class="software"|[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |class="software"|[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- class="grayrow" |class="software"|[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |class="software"|[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- class="grayrow" |class="software"|[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |class="software"|[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- class="grayrow" |class="software"|[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |class="software"|[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- class="grayrow" |class="software"|[[Animation Master]]||Really lame animation program that I made for SLOS |- |class="software"|[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- class="grayrow" |class="software"|[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |class="software"|[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- class="grayrow" |class="software"|[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} ===Software that I heavily contributed to=== {|class="software" | |} ===Software that I contributed to=== {|class="software" |class="software"|[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- class="grayrow" |class="software"|[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |class="software"|[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- class="grayrow" |class="software"|[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |class="software"|[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- class="grayrow" |class="software"|[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |} ==Training== 1df1cb1e751f24b1c13c03d28c8b12821045a760 1464 1463 2007-09-23T01:40:42Z Stevenlawrance 1 /* Training */ wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-23'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|'''Mozilla Thunderbird and Firefox extension development''' *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|'''Microsoft Windows to Linux computer and network migrations''' [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[HomeProfiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|'''Custom software development''' *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|'''Linux, Apache, MySQL, and PHP (LAMP) solution development''' *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|'''Java application development''' *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|'''Linux server configuration and maintenance''' *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |- |valign="top" width="50%"|'''Building and home automation''' *Computer-based electrical device control *[[Home Control]] | |} ==Experience== ===Software that I created=== {|class="software" |- |class="software"|[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- class="grayrow" |class="software"|[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |class="software"|[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- class="grayrow" |class="software"|[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |class="software"|[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- class="grayrow" |class="software"|[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |class="software"|[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its Ariesbase intranet system. I mostly helped out with the backend functionality such as the security system and global includes. Ariesbase was written in PHP and is an ongoing project that will take another couple years to fully develop |- class="grayrow" |class="software"|[[Bryant PRIDE]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |class="software"|[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- class="grayrow" |class="software"|[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |class="software"|[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- class="grayrow" |class="software"|[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |class="software"|[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- class="grayrow" |class="software"|[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |class="software"|[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- class="grayrow" |class="software"|[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |class="software"|[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- class="grayrow" |class="software"|[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |class="software"|[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- class="grayrow" |class="software"|[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |class="software"|[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- class="grayrow" |class="software"|[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |class="software"|[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- class="grayrow" |class="software"|[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |class="software"|[[Horses]]||A fun horse racing game that I made a long time ago |- class="grayrow" |class="software"|[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |class="software"|[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- class="grayrow" |class="software"|[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |class="software"|[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- class="grayrow" |class="software"|[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |class="software"|[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- class="grayrow" |class="software"|[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |class="software"|[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- class="grayrow" |class="software"|[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |class="software"|[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- class="grayrow" |class="software"|[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |class="software"|[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- class="grayrow" |class="software"|[[Animation Master]]||Really lame animation program that I made for SLOS |- |class="software"|[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- class="grayrow" |class="software"|[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |class="software"|[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- class="grayrow" |class="software"|[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} ===Software that I heavily contributed to=== {|class="software" | |} ===Software that I contributed to=== {|class="software" |class="software"|[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- class="grayrow" |class="software"|[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |class="software"|[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- class="grayrow" |class="software"|[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |class="software"|[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- class="grayrow" |class="software"|[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |} ==Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 66eeb92262e29455c0596963799cfb8cdeb82136 1465 1464 2007-09-23T01:41:20Z Stevenlawrance 1 /* Software that I heavily contributed to */ wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-23'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|'''Mozilla Thunderbird and Firefox extension development''' *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|'''Microsoft Windows to Linux computer and network migrations''' [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[HomeProfiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|'''Custom software development''' *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|'''Linux, Apache, MySQL, and PHP (LAMP) solution development''' *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|'''Java application development''' *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|'''Linux server configuration and maintenance''' *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |- |valign="top" width="50%"|'''Building and home automation''' *Computer-based electrical device control *[[Home Control]] | |} ==Experience== ===Software that I created=== {|class="software" |- |class="software"|[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- class="grayrow" |class="software"|[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |class="software"|[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- class="grayrow" |class="software"|[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |class="software"|[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- class="grayrow" |class="software"|[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |class="software"|[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its Ariesbase intranet system. I mostly helped out with the backend functionality such as the security system and global includes. Ariesbase was written in PHP and is an ongoing project that will take another couple years to fully develop |- class="grayrow" |class="software"|[[Bryant PRIDE]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |class="software"|[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- class="grayrow" |class="software"|[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |class="software"|[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- class="grayrow" |class="software"|[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |class="software"|[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- class="grayrow" |class="software"|[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |class="software"|[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- class="grayrow" |class="software"|[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |class="software"|[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- class="grayrow" |class="software"|[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |class="software"|[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- class="grayrow" |class="software"|[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |class="software"|[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- class="grayrow" |class="software"|[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |class="software"|[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- class="grayrow" |class="software"|[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |class="software"|[[Horses]]||A fun horse racing game that I made a long time ago |- class="grayrow" |class="software"|[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |class="software"|[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- class="grayrow" |class="software"|[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |class="software"|[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- class="grayrow" |class="software"|[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |class="software"|[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- class="grayrow" |class="software"|[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |class="software"|[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- class="grayrow" |class="software"|[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |class="software"|[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- class="grayrow" |class="software"|[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |class="software"|[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- class="grayrow" |class="software"|[[Animation Master]]||Really lame animation program that I made for SLOS |- |class="software"|[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- class="grayrow" |class="software"|[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |class="software"|[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- class="grayrow" |class="software"|[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} ===Software that I heavily contributed to=== {|class="software" |class="software"|Bosch Security Configuration Assistant |- | |} ===Software that I contributed to=== {|class="software" |class="software"|[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- class="grayrow" |class="software"|[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |class="software"|[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- class="grayrow" |class="software"|[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |class="software"|[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- class="grayrow" |class="software"|[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |} ==Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 4590b9d8a5a976b8948094527d3c4e4391fa3b1f 1466 1465 2007-09-23T01:47:57Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-23'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|'''Mozilla Thunderbird and Firefox extension development''' *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|'''Microsoft Windows to Linux computer and network migrations''' [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[HomeProfiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|'''Custom software development''' *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|'''Linux, Apache, MySQL, and PHP (LAMP) solution development''' *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|'''Java application development''' *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|'''Linux server configuration and maintenance''' *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |- |valign="top" width="50%"|'''Building and home automation''' *Computer-based electrical device control *[[Home Control]] | |} ==Experience== ===Software that I created=== {|class="software" |- |class="software"|[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- class="grayrow" |class="software"|[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |class="software"|[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- class="grayrow" |class="software"|[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |class="software"|[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- class="grayrow" |class="software"|[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |class="software"|[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- class="grayrow" |class="software"|[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |class="software"|[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its Ariesbase intranet system. I mostly helped out with the backend functionality such as the security system and global includes. Ariesbase was written in PHP and is an ongoing project that will take another couple years to fully develop |- class="grayrow" |class="software"|[[Bryant PRIDE]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |class="software"|[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- class="grayrow" |class="software"|[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |class="software"|[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- class="grayrow" |class="software"|[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |class="software"|[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- class="grayrow" |class="software"|[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |class="software"|[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- class="grayrow" |class="software"|[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |class="software"|[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- class="grayrow" |class="software"|[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |class="software"|[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- class="grayrow" |class="software"|[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |class="software"|[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- class="grayrow" |class="software"|[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |class="software"|[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- class="grayrow" |class="software"|[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |class="software"|[[Horses]]||A fun horse racing game that I made a long time ago |- class="grayrow" |class="software"|[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |class="software"|[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- class="grayrow" |class="software"|[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |class="software"|[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- class="grayrow" |class="software"|[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |class="software"|[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- class="grayrow" |class="software"|[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |class="software"|[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- class="grayrow" |class="software"|[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |class="software"|[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- class="grayrow" |class="software"|[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |class="software"|[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- class="grayrow" |class="software"|[[Animation Master]]||Really lame animation program that I made for SLOS |- |class="software"|[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- class="grayrow" |class="software"|[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |class="software"|[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- class="grayrow" |class="software"|[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} ===Software that I heavily contributed to=== {|class="software" |class="software"|Bosch Security Configuration Assistant |- | |} ===Software that I contributed to=== {|class="software" |class="software"|[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- class="grayrow" |class="software"|[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |class="software"|[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- class="grayrow" |class="software"|[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |class="software"|[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- class="grayrow" |class="software"|[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |} ==Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 c15ba9edc7c372f066f184bfb500d27d48cf77d9 1467 1466 2007-09-23T01:53:31Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-23'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|'''Mozilla Thunderbird and Firefox extension development''' *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|'''Microsoft Windows to Linux computer and network migrations''' [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[HomeProfiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|'''Custom software development''' *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|'''Linux, Apache, MySQL, and PHP (LAMP) solution development''' *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|'''Java application development''' *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|'''Linux server configuration and maintenance''' *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |- |valign="top" width="50%"|'''Building and home automation''' *Computer-based electrical device control *[[Home Control]] | |} ==Experience== ===Software that I created=== {|class="software" |- |class="software"|[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- class="grayrow" |class="software"|[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |class="software"|[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- class="grayrow" |class="software"|[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |class="software"|[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- class="grayrow" |class="software"|[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |class="software"|[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system |- |class="software"|[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- class="grayrow" |class="software"|[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |class="software"|[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its Ariesbase intranet system. I mostly helped out with the backend functionality such as the security system and global includes. Ariesbase was written in PHP and is an ongoing project that will take another couple years to fully develop |- class="grayrow" |class="software"|[[Bryant PRIDE]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |class="software"|[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- class="grayrow" |class="software"|[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |class="software"|[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- class="grayrow" |class="software"|[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |class="software"|[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- class="grayrow" |class="software"|[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |class="software"|[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- class="grayrow" |class="software"|[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |class="software"|[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- class="grayrow" |class="software"|[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |class="software"|[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- class="grayrow" |class="software"|[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |class="software"|[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- class="grayrow" |class="software"|[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |class="software"|[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- class="grayrow" |class="software"|[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |class="software"|[[Horses]]||A fun horse racing game that I made a long time ago |- class="grayrow" |class="software"|[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |class="software"|[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- class="grayrow" |class="software"|[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |class="software"|[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- class="grayrow" |class="software"|[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |class="software"|[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- class="grayrow" |class="software"|[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |class="software"|[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- class="grayrow" |class="software"|[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |class="software"|[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- class="grayrow" |class="software"|[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |class="software"|[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- class="grayrow" |class="software"|[[Animation Master]]||Really lame animation program that I made for SLOS |- |class="software"|[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- class="grayrow" |class="software"|[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |class="software"|[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- class="grayrow" |class="software"|[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} ===Software that I heavily contributed to=== {|class="software" |class="software"|Bosch Security Configuration Assistant |- | |} ===Software that I contributed to=== {|class="software" |class="software"|[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- class="grayrow" |class="software"|[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |class="software"|[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- class="grayrow" |class="software"|[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |class="software"|[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- class="grayrow" |class="software"|[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |} ==Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 035421f3d09ff07e0a4b78c4f957dba2a9feb5f2 1468 1467 2007-09-23T01:53:57Z Stevenlawrance 1 /* Experience */ wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-23'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|'''Mozilla Thunderbird and Firefox extension development''' *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|'''Microsoft Windows to Linux computer and network migrations''' [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[HomeProfiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|'''Custom software development''' *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|'''Linux, Apache, MySQL, and PHP (LAMP) solution development''' *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|'''Java application development''' *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|'''Linux server configuration and maintenance''' *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |- |valign="top" width="50%"|'''Building and home automation''' *Computer-based electrical device control *[[Home Control]] | |} ==Experience== ===Software and projects that I created=== {|class="software" |- |class="software"|[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- class="grayrow" |class="software"|[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |class="software"|[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- class="grayrow" |class="software"|[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |class="software"|[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- class="grayrow" |class="software"|[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |class="software"|[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system |- |class="software"|[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- class="grayrow" |class="software"|[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |class="software"|[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its Ariesbase intranet system. I mostly helped out with the backend functionality such as the security system and global includes. Ariesbase was written in PHP and is an ongoing project that will take another couple years to fully develop |- class="grayrow" |class="software"|[[Bryant PRIDE]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |class="software"|[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- class="grayrow" |class="software"|[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |class="software"|[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- class="grayrow" |class="software"|[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |class="software"|[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- class="grayrow" |class="software"|[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |class="software"|[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- class="grayrow" |class="software"|[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |class="software"|[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- class="grayrow" |class="software"|[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |class="software"|[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- class="grayrow" |class="software"|[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |class="software"|[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- class="grayrow" |class="software"|[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |class="software"|[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- class="grayrow" |class="software"|[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |class="software"|[[Horses]]||A fun horse racing game that I made a long time ago |- class="grayrow" |class="software"|[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |class="software"|[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- class="grayrow" |class="software"|[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |class="software"|[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- class="grayrow" |class="software"|[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |class="software"|[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- class="grayrow" |class="software"|[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |class="software"|[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- class="grayrow" |class="software"|[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |class="software"|[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- class="grayrow" |class="software"|[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |class="software"|[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- class="grayrow" |class="software"|[[Animation Master]]||Really lame animation program that I made for SLOS |- |class="software"|[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- class="grayrow" |class="software"|[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |class="software"|[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- class="grayrow" |class="software"|[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} ===Software and projects that I heavily contributed to=== {|class="software" |class="software"|Bosch Security Configuration Assistant |- | |} ===Software and projects that I contributed to=== {|class="software" |class="software"|[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- class="grayrow" |class="software"|[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |class="software"|[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- class="grayrow" |class="software"|[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |class="software"|[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- class="grayrow" |class="software"|[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |} ==Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 492cc820a47b229588b8408069b891e0423f9f73 1469 1468 2007-09-23T02:07:17Z Stevenlawrance 1 /* Software and projects that I heavily contributed to */ wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-23'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|'''Mozilla Thunderbird and Firefox extension development''' *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|'''Microsoft Windows to Linux computer and network migrations''' [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[HomeProfiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|'''Custom software development''' *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|'''Linux, Apache, MySQL, and PHP (LAMP) solution development''' *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|'''Java application development''' *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|'''Linux server configuration and maintenance''' *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |- |valign="top" width="50%"|'''Building and home automation''' *Computer-based electrical device control *[[Home Control]] | |} ==Experience== ===Software and projects that I created=== {|class="software" |- |class="software"|[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- class="grayrow" |class="software"|[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |class="software"|[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- class="grayrow" |class="software"|[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |class="software"|[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- class="grayrow" |class="software"|[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |class="software"|[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system |- |class="software"|[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- class="grayrow" |class="software"|[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |class="software"|[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its Ariesbase intranet system. I mostly helped out with the backend functionality such as the security system and global includes. Ariesbase was written in PHP and is an ongoing project that will take another couple years to fully develop |- class="grayrow" |class="software"|[[Bryant PRIDE]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |class="software"|[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- class="grayrow" |class="software"|[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |class="software"|[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- class="grayrow" |class="software"|[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |class="software"|[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- class="grayrow" |class="software"|[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |class="software"|[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- class="grayrow" |class="software"|[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |class="software"|[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- class="grayrow" |class="software"|[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |class="software"|[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- class="grayrow" |class="software"|[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |class="software"|[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- class="grayrow" |class="software"|[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |class="software"|[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- class="grayrow" |class="software"|[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |class="software"|[[Horses]]||A fun horse racing game that I made a long time ago |- class="grayrow" |class="software"|[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |class="software"|[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- class="grayrow" |class="software"|[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |class="software"|[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- class="grayrow" |class="software"|[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |class="software"|[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- class="grayrow" |class="software"|[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |class="software"|[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- class="grayrow" |class="software"|[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |class="software"|[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- class="grayrow" |class="software"|[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |class="software"|[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- class="grayrow" |class="software"|[[Animation Master]]||Really lame animation program that I made for SLOS |- |class="software"|[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- class="grayrow" |class="software"|[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |class="software"|[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- class="grayrow" |class="software"|[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} ===Software and projects that I heavily contributed to=== {|class="software" |class="software"|Bosch Security Configuration Assistant|| |- class="grayrow" |class="software"|[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners |- |class="software"|[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking |- class="grayrow" |class="software"|[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas in visually disabling content on the web |- |} ===Software and projects that I contributed to=== {|class="software" |class="software"|[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- class="grayrow" |class="software"|[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |class="software"|[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- class="grayrow" |class="software"|[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |class="software"|[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- class="grayrow" |class="software"|[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |} ==Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 8fc57090b1add16e1988ee86542b32035467b704 1470 1469 2007-09-23T02:08:14Z Stevenlawrance 1 /* Software and projects that I heavily contributed to */ wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-23'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|'''Mozilla Thunderbird and Firefox extension development''' *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|'''Microsoft Windows to Linux computer and network migrations''' [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[HomeProfiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|'''Custom software development''' *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|'''Linux, Apache, MySQL, and PHP (LAMP) solution development''' *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|'''Java application development''' *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|'''Linux server configuration and maintenance''' *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |- |valign="top" width="50%"|'''Building and home automation''' *Computer-based electrical device control *[[Home Control]] | |} ==Experience== ===Software and projects that I created=== {|class="software" |- |class="software"|[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- class="grayrow" |class="software"|[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |class="software"|[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- class="grayrow" |class="software"|[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |class="software"|[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- class="grayrow" |class="software"|[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |class="software"|[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system |- |class="software"|[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- class="grayrow" |class="software"|[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |class="software"|[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its Ariesbase intranet system. I mostly helped out with the backend functionality such as the security system and global includes. Ariesbase was written in PHP and is an ongoing project that will take another couple years to fully develop |- class="grayrow" |class="software"|[[Bryant PRIDE]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |class="software"|[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- class="grayrow" |class="software"|[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |class="software"|[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- class="grayrow" |class="software"|[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |class="software"|[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- class="grayrow" |class="software"|[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |class="software"|[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- class="grayrow" |class="software"|[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |class="software"|[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- class="grayrow" |class="software"|[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |class="software"|[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- class="grayrow" |class="software"|[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |class="software"|[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- class="grayrow" |class="software"|[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |class="software"|[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- class="grayrow" |class="software"|[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |class="software"|[[Horses]]||A fun horse racing game that I made a long time ago |- class="grayrow" |class="software"|[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |class="software"|[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- class="grayrow" |class="software"|[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |class="software"|[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- class="grayrow" |class="software"|[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |class="software"|[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- class="grayrow" |class="software"|[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |class="software"|[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- class="grayrow" |class="software"|[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |class="software"|[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- class="grayrow" |class="software"|[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |class="software"|[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- class="grayrow" |class="software"|[[Animation Master]]||Really lame animation program that I made for SLOS |- |class="software"|[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- class="grayrow" |class="software"|[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |class="software"|[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- class="grayrow" |class="software"|[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} ===Software and projects that I heavily contributed to=== {|class="software" |class="software"|[[Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- class="grayrow" |class="software"|[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners |- |class="software"|[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking |- class="grayrow" |class="software"|[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas in visually disabling content on the web |- |} ===Software and projects that I contributed to=== {|class="software" |class="software"|[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- class="grayrow" |class="software"|[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |class="software"|[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- class="grayrow" |class="software"|[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |class="software"|[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- class="grayrow" |class="software"|[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |} ==Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 97e89f920d201a165814fa8b8cccf068e4bd36f1 1471 1470 2007-09-23T02:17:51Z Stevenlawrance 1 /* Experience */ wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-23'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|'''Mozilla Thunderbird and Firefox extension development''' *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|'''Microsoft Windows to Linux computer and network migrations''' [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[HomeProfiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|'''Custom software development''' *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|'''Linux, Apache, MySQL, and PHP (LAMP) solution development''' *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|'''Java application development''' *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|'''Linux server configuration and maintenance''' *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |- |valign="top" width="50%"|'''Building and home automation''' *Computer-based electrical device control *[[Home Control]] | |} ==Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |class="software"|[[Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- class="grayrow" |class="software"|[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners |- |class="software"|[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking |- class="grayrow" |class="software"|[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas in visually disabling content on the web |- |class="software"| |} <br> ===Individual software that I created=== I wrote and maintain the following software: {|class="software" |- |class="software"|[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- class="grayrow" |class="software"|[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |class="software"|[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- class="grayrow" |class="software"|[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |class="software"|[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- class="grayrow" |class="software"|[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |class="software"|[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- class="grayrow" |class="software"|[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system |- |class="software"|[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- class="grayrow" |class="software"|[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |class="software"|[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its Ariesbase intranet system. I mostly helped out with the backend functionality such as the security system and global includes. Ariesbase was written in PHP and is an ongoing project that will take another couple years to fully develop |- class="grayrow" |class="software"|[[Bryant PRIDE]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |class="software"|[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- class="grayrow" |class="software"|[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |class="software"|[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- class="grayrow" |class="software"|[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |class="software"|[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- class="grayrow" |class="software"|[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |class="software"|[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- class="grayrow" |class="software"|[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |class="software"|[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- class="grayrow" |class="software"|[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |class="software"|[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- class="grayrow" |class="software"|[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |class="software"|[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- class="grayrow" |class="software"|[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |class="software"|[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- class="grayrow" |class="software"|[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |class="software"|[[Horses]]||A fun horse racing game that I made a long time ago |- class="grayrow" |class="software"|[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |class="software"|[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- class="grayrow" |class="software"|[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |class="software"|[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- class="grayrow" |class="software"|[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |class="software"|[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- class="grayrow" |class="software"|[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |class="software"|[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- class="grayrow" |class="software"|[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |class="software"|[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- class="grayrow" |class="software"|[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |class="software"|[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- class="grayrow" |class="software"|[[Animation Master]]||Really lame animation program that I made for SLOS |- |class="software"|[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- class="grayrow" |class="software"|[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |class="software"|[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- class="grayrow" |class="software"|[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |class="software"|[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- class="grayrow" |class="software"|[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |class="software"|[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- class="grayrow" |class="software"|[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |class="software"|[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- class="grayrow" |class="software"|[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |} ==Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 f4da34d4f66b5a6c882a121da7d41bf365487b0a 1472 1471 2007-09-23T02:18:15Z Stevenlawrance 1 /* Interests and Consulting Services */ wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-23'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|'''Mozilla Thunderbird and Firefox extension development''' *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|'''Microsoft Windows to Linux computer and network migrations''' [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[HomeProfiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|'''Custom software development''' *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|'''Linux, Apache, MySQL, and PHP (LAMP) solution development''' *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|'''Java application development''' *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|'''Linux server configuration and maintenance''' *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |- |valign="top" width="50%"|'''Building and home automation''' *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] | |} ==Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |class="software"|[[Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- class="grayrow" |class="software"|[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners |- |class="software"|[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking |- class="grayrow" |class="software"|[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas in visually disabling content on the web |- |class="software"| |} <br> ===Individual software that I created=== I wrote and maintain the following software: {|class="software" |- |class="software"|[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- class="grayrow" |class="software"|[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |class="software"|[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- class="grayrow" |class="software"|[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |class="software"|[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- class="grayrow" |class="software"|[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |class="software"|[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- class="grayrow" |class="software"|[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system |- |class="software"|[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- class="grayrow" |class="software"|[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |class="software"|[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its Ariesbase intranet system. I mostly helped out with the backend functionality such as the security system and global includes. Ariesbase was written in PHP and is an ongoing project that will take another couple years to fully develop |- class="grayrow" |class="software"|[[Bryant PRIDE]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |class="software"|[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- class="grayrow" |class="software"|[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |class="software"|[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- class="grayrow" |class="software"|[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |class="software"|[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- class="grayrow" |class="software"|[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |class="software"|[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- class="grayrow" |class="software"|[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |class="software"|[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- class="grayrow" |class="software"|[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |class="software"|[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- class="grayrow" |class="software"|[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |class="software"|[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- class="grayrow" |class="software"|[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |class="software"|[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- class="grayrow" |class="software"|[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |class="software"|[[Horses]]||A fun horse racing game that I made a long time ago |- class="grayrow" |class="software"|[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |class="software"|[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- class="grayrow" |class="software"|[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |class="software"|[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- class="grayrow" |class="software"|[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |class="software"|[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- class="grayrow" |class="software"|[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |class="software"|[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- class="grayrow" |class="software"|[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |class="software"|[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- class="grayrow" |class="software"|[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |class="software"|[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- class="grayrow" |class="software"|[[Animation Master]]||Really lame animation program that I made for SLOS |- |class="software"|[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- class="grayrow" |class="software"|[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |class="software"|[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- class="grayrow" |class="software"|[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |class="software"|[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- class="grayrow" |class="software"|[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |class="software"|[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- class="grayrow" |class="software"|[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |class="software"|[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- class="grayrow" |class="software"|[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |} ==Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 679b8a02b2a6fca443ae16a84224b4c8067af423 1473 1472 2007-09-23T02:20:51Z Stevenlawrance 1 /* Team software */ wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-23'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|'''Mozilla Thunderbird and Firefox extension development''' *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|'''Microsoft Windows to Linux computer and network migrations''' [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[HomeProfiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|'''Custom software development''' *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|'''Linux, Apache, MySQL, and PHP (LAMP) solution development''' *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|'''Java application development''' *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|'''Linux server configuration and maintenance''' *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |- |valign="top" width="50%"|'''Building and home automation''' *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] | |} ==Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |class="software"|[[Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- class="grayrow" |class="software"|[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners |- |class="software"|[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking |- class="grayrow" |class="software"|[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |class="software"|[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas in visually disabling content on the web |} <br> ===Individual software that I created=== I wrote and maintain the following software: {|class="software" |- |class="software"|[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- class="grayrow" |class="software"|[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |class="software"|[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- class="grayrow" |class="software"|[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |class="software"|[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- class="grayrow" |class="software"|[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |class="software"|[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- class="grayrow" |class="software"|[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system |- |class="software"|[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- class="grayrow" |class="software"|[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |class="software"|[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its Ariesbase intranet system. I mostly helped out with the backend functionality such as the security system and global includes. Ariesbase was written in PHP and is an ongoing project that will take another couple years to fully develop |- class="grayrow" |class="software"|[[Bryant PRIDE]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |class="software"|[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- class="grayrow" |class="software"|[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |class="software"|[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- class="grayrow" |class="software"|[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |class="software"|[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- class="grayrow" |class="software"|[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |class="software"|[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- class="grayrow" |class="software"|[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |class="software"|[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- class="grayrow" |class="software"|[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |class="software"|[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- class="grayrow" |class="software"|[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |class="software"|[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- class="grayrow" |class="software"|[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |class="software"|[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- class="grayrow" |class="software"|[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |class="software"|[[Horses]]||A fun horse racing game that I made a long time ago |- class="grayrow" |class="software"|[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |class="software"|[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- class="grayrow" |class="software"|[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |class="software"|[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- class="grayrow" |class="software"|[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |class="software"|[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- class="grayrow" |class="software"|[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |class="software"|[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- class="grayrow" |class="software"|[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |class="software"|[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- class="grayrow" |class="software"|[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |class="software"|[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- class="grayrow" |class="software"|[[Animation Master]]||Really lame animation program that I made for SLOS |- |class="software"|[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- class="grayrow" |class="software"|[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |class="software"|[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- class="grayrow" |class="software"|[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |class="software"|[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- class="grayrow" |class="software"|[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |class="software"|[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- class="grayrow" |class="software"|[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |class="software"|[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- class="grayrow" |class="software"|[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |} ==Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 4538dc4f37ffa18fcd0e81c379c655d5d27d8b11 1474 1473 2007-09-23T02:23:22Z Stevenlawrance 1 /* Team software */ wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-23'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|'''Mozilla Thunderbird and Firefox extension development''' *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|'''Microsoft Windows to Linux computer and network migrations''' [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[HomeProfiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|'''Custom software development''' *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|'''Linux, Apache, MySQL, and PHP (LAMP) solution development''' *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|'''Java application development''' *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|'''Linux server configuration and maintenance''' *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |- |valign="top" width="50%"|'''Building and home automation''' *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] | |} ==Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |class="software"|[[Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- class="grayrow" |class="software"|[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |class="software"|[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- class="grayrow" |class="software"|[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |class="software"|[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas in visually disabling content on the web |} <br> ===Individual software that I created=== I wrote and maintain the following software: {|class="software" |- |class="software"|[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- class="grayrow" |class="software"|[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |class="software"|[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- class="grayrow" |class="software"|[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |class="software"|[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- class="grayrow" |class="software"|[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |class="software"|[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- class="grayrow" |class="software"|[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system |- |class="software"|[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- class="grayrow" |class="software"|[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |class="software"|[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its Ariesbase intranet system. I mostly helped out with the backend functionality such as the security system and global includes. Ariesbase was written in PHP and is an ongoing project that will take another couple years to fully develop |- class="grayrow" |class="software"|[[Bryant PRIDE]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |class="software"|[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- class="grayrow" |class="software"|[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |class="software"|[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- class="grayrow" |class="software"|[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |class="software"|[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- class="grayrow" |class="software"|[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |class="software"|[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- class="grayrow" |class="software"|[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |class="software"|[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- class="grayrow" |class="software"|[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |class="software"|[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- class="grayrow" |class="software"|[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |class="software"|[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- class="grayrow" |class="software"|[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |class="software"|[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- class="grayrow" |class="software"|[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |class="software"|[[Horses]]||A fun horse racing game that I made a long time ago |- class="grayrow" |class="software"|[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |class="software"|[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- class="grayrow" |class="software"|[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |class="software"|[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- class="grayrow" |class="software"|[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |class="software"|[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- class="grayrow" |class="software"|[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |class="software"|[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- class="grayrow" |class="software"|[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |class="software"|[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- class="grayrow" |class="software"|[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |class="software"|[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- class="grayrow" |class="software"|[[Animation Master]]||Really lame animation program that I made for SLOS |- |class="software"|[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- class="grayrow" |class="software"|[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |class="software"|[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- class="grayrow" |class="software"|[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |class="software"|[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- class="grayrow" |class="software"|[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |class="software"|[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- class="grayrow" |class="software"|[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |class="software"|[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- class="grayrow" |class="software"|[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |} ==Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 1858b5a9801c01931da61e449fdd6683b36e285d 1475 1474 2007-09-23T02:24:39Z Stevenlawrance 1 /* Experience */ wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-23'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|'''Mozilla Thunderbird and Firefox extension development''' *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|'''Microsoft Windows to Linux computer and network migrations''' [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[HomeProfiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|'''Custom software development''' *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|'''Linux, Apache, MySQL, and PHP (LAMP) solution development''' *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|'''Java application development''' *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|'''Linux server configuration and maintenance''' *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |- |valign="top" width="50%"|'''Building and home automation''' *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] | |} ==Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |class="software"|[[Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- class="grayrow" |class="software"|[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |class="software"|[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- class="grayrow" |class="software"|[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |class="software"|[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas in visually disabling content on the web |} <br> ===Individual software that I created=== I wrote and maintain the following software: {|class="software" |- |class="software"|[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- class="grayrow" |class="software"|[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |class="software"|[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- class="grayrow" |class="software"|[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |class="software"|[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- class="grayrow" |class="software"|[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |class="software"|[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- class="grayrow" |class="software"|[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system |- |class="software"|[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- class="grayrow" |class="software"|[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- class="grayrow" |class="software"|[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |class="software"|[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- class="grayrow" |class="software"|[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |class="software"|[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- class="grayrow" |class="software"|[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |class="software"|[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- class="grayrow" |class="software"|[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |class="software"|[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- class="grayrow" |class="software"|[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |class="software"|[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- class="grayrow" |class="software"|[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |class="software"|[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- class="grayrow" |class="software"|[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |class="software"|[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- class="grayrow" |class="software"|[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |class="software"|[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- class="grayrow" |class="software"|[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |class="software"|[[Horses]]||A fun horse racing game that I made a long time ago |- class="grayrow" |class="software"|[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |class="software"|[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- class="grayrow" |class="software"|[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |class="software"|[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- class="grayrow" |class="software"|[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |class="software"|[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- class="grayrow" |class="software"|[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |class="software"|[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- class="grayrow" |class="software"|[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |class="software"|[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- class="grayrow" |class="software"|[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |class="software"|[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- class="grayrow" |class="software"|[[Animation Master]]||Really lame animation program that I made for SLOS |- |class="software"|[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- class="grayrow" |class="software"|[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |class="software"|[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- class="grayrow" |class="software"|[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |class="software"|[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- class="grayrow" |class="software"|[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |class="software"|[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- class="grayrow" |class="software"|[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |class="software"|[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- class="grayrow" |class="software"|[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |class="software"|[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its Ariesbase intranet system. I mostly helped out with the backend functionality such as the security system and global includes. Ariesbase was written in PHP and is an ongoing project that will take another couple years to fully develop |} ==Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 0942e007bf0719c65c2564415d5e4f2e88538ab3 1476 1475 2007-09-23T02:38:48Z Stevenlawrance 1 /* Team software */ wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-23'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|'''Mozilla Thunderbird and Firefox extension development''' *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|'''Microsoft Windows to Linux computer and network migrations''' [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[HomeProfiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|'''Custom software development''' *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|'''Linux, Apache, MySQL, and PHP (LAMP) solution development''' *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|'''Java application development''' *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|'''Linux server configuration and maintenance''' *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |- |valign="top" width="50%"|'''Building and home automation''' *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] | |} ==Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |class="software"|[[Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- class="grayrow" |class="software"|[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |class="software"|[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- class="grayrow" |class="software"|[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |class="software"|[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |} <br> ===Individual software that I created=== I wrote and maintain the following software: {|class="software" |- |class="software"|[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- class="grayrow" |class="software"|[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |class="software"|[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- class="grayrow" |class="software"|[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |class="software"|[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- class="grayrow" |class="software"|[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |class="software"|[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- class="grayrow" |class="software"|[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system |- |class="software"|[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- class="grayrow" |class="software"|[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- class="grayrow" |class="software"|[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |class="software"|[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- class="grayrow" |class="software"|[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |class="software"|[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- class="grayrow" |class="software"|[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |class="software"|[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- class="grayrow" |class="software"|[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |class="software"|[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- class="grayrow" |class="software"|[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |class="software"|[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- class="grayrow" |class="software"|[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |class="software"|[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- class="grayrow" |class="software"|[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |class="software"|[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- class="grayrow" |class="software"|[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |class="software"|[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- class="grayrow" |class="software"|[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |class="software"|[[Horses]]||A fun horse racing game that I made a long time ago |- class="grayrow" |class="software"|[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |class="software"|[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- class="grayrow" |class="software"|[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |class="software"|[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- class="grayrow" |class="software"|[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |class="software"|[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- class="grayrow" |class="software"|[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |class="software"|[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- class="grayrow" |class="software"|[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |class="software"|[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- class="grayrow" |class="software"|[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |class="software"|[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- class="grayrow" |class="software"|[[Animation Master]]||Really lame animation program that I made for SLOS |- |class="software"|[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- class="grayrow" |class="software"|[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |class="software"|[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- class="grayrow" |class="software"|[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |class="software"|[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- class="grayrow" |class="software"|[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |class="software"|[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- class="grayrow" |class="software"|[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |class="software"|[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- class="grayrow" |class="software"|[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |class="software"|[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its Ariesbase intranet system. I mostly helped out with the backend functionality such as the security system and global includes. Ariesbase was written in PHP and is an ongoing project that will take another couple years to fully develop |} ==Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 11e82f251c45bedaa1b72df8f63ed17c64e77d55 1480 1476 2007-09-23T02:57:16Z Stevenlawrance 1 /* Experience */ wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-23'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|'''Mozilla Thunderbird and Firefox extension development''' *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|'''Microsoft Windows to Linux computer and network migrations''' [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[HomeProfiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|'''Custom software development''' *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|'''Linux, Apache, MySQL, and PHP (LAMP) solution development''' *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|'''Java application development''' *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|'''Linux server configuration and maintenance''' *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |- |valign="top" width="50%"|'''Building and home automation''' *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] | |} ==Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- class="grayrow" |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- class="grayrow" |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |} <br> ===Individual software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- class="grayrow" |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- class="grayrow" |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- class="grayrow" |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- class="grayrow" |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- class="grayrow" |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- class="grayrow" |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- class="grayrow" |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- class="grayrow" |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- class="grayrow" |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- class="grayrow" |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- class="grayrow" |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- class="grayrow" |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- class="grayrow" |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- class="grayrow" |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- class="grayrow" |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- class="grayrow" |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- class="grayrow" |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- class="grayrow" |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- class="grayrow" |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- class="grayrow" |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- class="grayrow" |[[Animation Master]]||Really lame animation program that I made for SLOS |- |[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- class="grayrow" |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- class="grayrow" |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- class="grayrow" |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- class="grayrow" |[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- class="grayrow" |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its Ariesbase intranet system. I mostly helped out with the backend functionality such as the security system and global includes. Ariesbase was written in PHP and is an ongoing project that will take another couple years to fully develop |} ==Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 b9a562e8a2b44fd13506525e48475576aa8ac55f 1481 1480 2007-09-23T02:58:04Z Stevenlawrance 1 /* Experience */ wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-23'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|'''Mozilla Thunderbird and Firefox extension development''' *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|'''Microsoft Windows to Linux computer and network migrations''' [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[HomeProfiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|'''Custom software development''' *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|'''Linux, Apache, MySQL, and PHP (LAMP) solution development''' *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|'''Java application development''' *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|'''Linux server configuration and maintenance''' *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |- |valign="top" width="50%"|'''Building and home automation''' *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] | |} ==Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- class="grayrow" |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- class="grayrow" |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- class="grayrow" |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its Ariesbase intranet system. I mostly helped out with the backend functionality such as the security system and global includes. Ariesbase was written in PHP and is an ongoing project that will take another couple years to fully develop |} <br> ===Individual software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- class="grayrow" |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- class="grayrow" |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- class="grayrow" |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- class="grayrow" |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- class="grayrow" |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- class="grayrow" |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- class="grayrow" |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- class="grayrow" |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- class="grayrow" |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- class="grayrow" |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- class="grayrow" |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- class="grayrow" |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- class="grayrow" |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- class="grayrow" |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- class="grayrow" |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- class="grayrow" |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- class="grayrow" |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- class="grayrow" |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- class="grayrow" |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- class="grayrow" |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- class="grayrow" |[[Animation Master]]||Really lame animation program that I made for SLOS |- |[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- class="grayrow" |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- class="grayrow" |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- class="grayrow" |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- class="grayrow" |[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- class="grayrow" |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |} ==Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 5ca33880dd888c02e5f12d3d324c53dffbf769ac 1482 1481 2007-09-23T02:58:36Z Stevenlawrance 1 /* Software and project contributions */ wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-23'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|'''Mozilla Thunderbird and Firefox extension development''' *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|'''Microsoft Windows to Linux computer and network migrations''' [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[HomeProfiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|'''Custom software development''' *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|'''Linux, Apache, MySQL, and PHP (LAMP) solution development''' *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|'''Java application development''' *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|'''Linux server configuration and maintenance''' *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |- |valign="top" width="50%"|'''Building and home automation''' *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] | |} ==Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- class="grayrow" |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- class="grayrow" |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- class="grayrow" |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its Ariesbase intranet system. I mostly helped out with the backend functionality such as the security system and global includes. Ariesbase was written in PHP and is an ongoing project that will take another couple years to fully develop |} <br> ===Individual software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- class="grayrow" |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- class="grayrow" |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- class="grayrow" |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- class="grayrow" |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- class="grayrow" |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- class="grayrow" |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- class="grayrow" |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- class="grayrow" |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- class="grayrow" |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- class="grayrow" |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- class="grayrow" |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- class="grayrow" |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- class="grayrow" |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- class="grayrow" |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- class="grayrow" |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- class="grayrow" |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- class="grayrow" |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- class="grayrow" |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- class="grayrow" |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- class="grayrow" |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- class="grayrow" |[[Animation Master]]||Really lame animation program that I made for SLOS |- |[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- class="grayrow" |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- class="grayrow" |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- class="grayrow" |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- class="grayrow" |[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- class="grayrow" |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |} <br> ==Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 039108e1110357b0fb85a0b18cce815977540792 1493 1482 2007-09-23T03:42:21Z Stevenlawrance 1 /* Experience */ wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-23'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|'''Mozilla Thunderbird and Firefox extension development''' *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|'''Microsoft Windows to Linux computer and network migrations''' [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[HomeProfiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|'''Custom software development''' *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|'''Linux, Apache, MySQL, and PHP (LAMP) solution development''' *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|'''Java application development''' *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|'''Linux server configuration and maintenance''' *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |- |valign="top" width="50%"|'''Building and home automation''' *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] | |} ==Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its Ariesbase intranet system. I mostly helped out with the backend functionality such as the security system and global includes. Ariesbase was written in PHP and is an ongoing project that will take another couple years to fully develop |} <br> ===Individual software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[Animation Master]]||Really lame animation program that I made for SLOS |- |[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |} <br> ==Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 c9c98a887989c323262747c01bbafea8621e7915 1494 1493 2007-09-23T03:57:20Z Stevenlawrance 1 wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-23'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|'''Mozilla Thunderbird and Firefox extension development''' *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|'''Microsoft Windows to Linux computer and network migrations''' [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|'''Custom software development''' *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|'''Linux, Apache, MySQL, and PHP (LAMP) solution development''' *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|'''Java application development''' *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|'''Linux server configuration and maintenance''' *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |- |valign="top" width="50%"|'''Building and home automation''' *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|'''Software and network security''' *Security in software development processes *Border, network, and local system security *Web application security *Novell AppArmor *Linux iptables *Astaro Secure Linux |} ==Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its Ariesbase intranet system. I mostly helped out with the backend functionality such as the security system and global includes. Ariesbase was written in PHP and is an ongoing project that will take another couple years to fully develop |} <br> ===Individual software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[Animation Master]]||Really lame animation program that I made for SLOS |- |[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |} <br> ==Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 b65996db1b35fa7d0c9253b17381576a3fc8d04c 1495 1494 2007-09-23T03:58:04Z Stevenlawrance 1 /* Interests and Consulting Services */ wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-23'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|'''Mozilla Thunderbird and Firefox extension development''' *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|'''Microsoft Windows to Linux computer and network migrations''' [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|'''Custom software development''' *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|'''Linux, Apache, MySQL, and PHP (LAMP) solution development''' *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|'''Java application development''' *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|'''Software and network security''' *Security in software development processes *Border, network, and local system security *Web application security *Novell AppArmor *Linux iptables *Astaro Secure Linux |- |valign="top" width="50%"|'''Building and home automation''' *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|'''Linux server configuration and maintenance''' *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its Ariesbase intranet system. I mostly helped out with the backend functionality such as the security system and global includes. Ariesbase was written in PHP and is an ongoing project that will take another couple years to fully develop |} <br> ===Individual software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[Animation Master]]||Really lame animation program that I made for SLOS |- |[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |} <br> ==Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 0f4c1b19f4a387b5b5f6ebb5f05babae599bd562 1496 1495 2007-09-23T03:59:12Z Stevenlawrance 1 /* Interests and Consulting Services */ wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-23'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|'''Mozilla Thunderbird and Firefox extension development''' *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|'''Microsoft Windows to Linux computer and network migrations''' [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|'''Custom software development''' *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|'''Linux, Apache, MySQL, and PHP (LAMP) solution development''' *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|'''Java application development''' *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|'''Software and network security''' *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux |- |valign="top" width="50%"|'''Building and home automation''' *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|'''Linux server configuration and maintenance''' *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its Ariesbase intranet system. I mostly helped out with the backend functionality such as the security system and global includes. Ariesbase was written in PHP and is an ongoing project that will take another couple years to fully develop |} <br> ===Individual software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[Animation Master]]||Really lame animation program that I made for SLOS |- |[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |} <br> ==Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 3c1eae3d0a1b39e011237ee397bf03cedbb4c0c4 1497 1496 2007-09-23T05:17:30Z Stevenlawrance 1 /* Software and project contributions */ wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-23'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|'''Mozilla Thunderbird and Firefox extension development''' *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|'''Microsoft Windows to Linux computer and network migrations''' [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|'''Custom software development''' *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|'''Linux, Apache, MySQL, and PHP (LAMP) solution development''' *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|'''Java application development''' *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|'''Software and network security''' *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux |- |valign="top" width="50%"|'''Building and home automation''' *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|'''Linux server configuration and maintenance''' *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its Ariesbase intranet system. I mostly helped out with the backend functionality such as the security system and global includes. Ariesbase was written in PHP and is an ongoing project that will take another couple years to fully develop |} <br> ===Individual software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[Animation Master]]||Really lame animation program that I made for SLOS |- |[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions |} <br> ==Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 baf81a1879f1cc0cb2367e9df363c77bdc8f8c89 1498 1497 2007-09-23T05:21:50Z Stevenlawrance 1 wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-23'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|'''Mozilla Thunderbird and Firefox extension development''' *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|'''Microsoft Windows to Linux computer and network migrations''' [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|'''Custom software development''' *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|'''Linux, Apache, MySQL, and PHP (LAMP) solution development''' *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|'''Java application development''' *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|'''Software and network security''' *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux |- |valign="top" width="50%"|'''Building and home automation''' *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|'''Linux server configuration and maintenance''' *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its Ariesbase intranet system. I mostly helped out with the backend functionality such as the security system and global includes. Ariesbase was written in PHP and is an ongoing project that will take another couple years to fully develop |} <br> ===Individual software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[Animation Master]]||Really lame animation program that I made for SLOS |- |[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions |} <br> ==Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 6d36fdaa150203bc3d7a1e16bb0e13829d1e1de3 1499 1498 2007-09-23T05:24:37Z Stevenlawrance 1 /* Team software */ wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-23'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|'''Mozilla Thunderbird and Firefox extension development''' *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|'''Microsoft Windows to Linux computer and network migrations''' [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|'''Custom software development''' *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|'''Linux, Apache, MySQL, and PHP (LAMP) solution development''' *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|'''Java application development''' *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|'''Software and network security''' *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux |- |valign="top" width="50%"|'''Building and home automation''' *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|'''Linux server configuration and maintenance''' *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the backend functionality such as the security system and global includes |} <br> ===Individual software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[Animation Master]]||Really lame animation program that I made for SLOS |- |[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions |} <br> ==Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 a72fd906aa371a85fefd5b69afe816d564d7ff4d 1500 1499 2007-09-23T05:26:41Z Stevenlawrance 1 /* Team software */ wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-23'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|'''Mozilla Thunderbird and Firefox extension development''' *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|'''Microsoft Windows to Linux computer and network migrations''' [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|'''Custom software development''' *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|'''Linux, Apache, MySQL, and PHP (LAMP) solution development''' *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|'''Java application development''' *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|'''Software and network security''' *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux |- |valign="top" width="50%"|'''Building and home automation''' *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|'''Linux server configuration and maintenance''' *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments |} <br> ===Individual software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[Animation Master]]||Really lame animation program that I made for SLOS |- |[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions |} <br> ==Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 b92a429e24e43eefec1f03028d8b80f44db7b6c5 1502 1500 2007-09-23T05:36:50Z Stevenlawrance 1 wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-23'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|<h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|<h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|<h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|<h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux |- |valign="top" width="50%"|<h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments |} <br> ===Individual software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[Animation Master]]||Really lame animation program that I made for SLOS |- |[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions |} <br> ==Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 3dd5dc635c90fa28c0da72ba57908c9d6056fca7 1503 1502 2007-09-23T05:43:20Z Stevenlawrance 1 /* Experience */ wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-23'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|<h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|<h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|<h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|<h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux |- |valign="top" width="50%"|<h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments |} <br> ===Individual software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[Animation Master]]||Really lame animation program that I made for SLOS |- |[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions |} <br> ==Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 0bcba42af55ece414c333f42cd471912cc9e3ef3 MediaWiki:Common.js 8 1417 1483 2007-09-23T03:20:29Z Stevenlawrance 1 New page: /* Any JavaScript here will be loaded for all users on every page load. */ // Highlight every other line in the software tables var orig_onload = window.onload; window.onload = function(e... javascript text/javascript /* Any JavaScript here will be loaded for all users on every page load. */ // Highlight every other line in the software tables var orig_onload = window.onload; window.onload = function(e) { orig_onload(e); var tables = document.getElementsByTagName("table"); var rows; for (var t = 0; t < tables.length; i++) { if (tables[t].className == "software") { rows = tables[t].rows; for (var r = 0; r < rows.length; i++) { if (r % 2 == 0) { rows[t].className = "grayrow"; } } alert("meow"); } } } 2b7e557f0cd12eb2c7859dbce3ca731b9e2e3c27 1486 1483 2007-09-23T03:36:58Z Stevenlawrance 1 javascript text/javascript /* Any JavaScript here will be loaded for all users on every page load. */ // Highlight every other line in the software tables var orig_onload = window.onload; window.onload = function(e) { alert(e); orig_onload(e); var tables = document.getElementsByTagName("table"); var rows; for (var t = 0; t < tables.length; i++) { if (tables[t].className == "software") { rows = tables[t].rows; for (var r = 0; r < rows.length; i++) { if (r % 2 == 0) { rows[t].className = "grayrow"; } } alert("meow"); } } } 0c7afafbd21b9a39b1d222a6bb355ee1c1988792 1487 1486 2007-09-23T03:37:32Z Stevenlawrance 1 javascript text/javascript /* Any JavaScript here will be loaded for all users on every page load. */ // Highlight every other line in the software tables var orig_onload = window.onload; window.onload = function(e) { alert(e); var tables = document.getElementsByTagName("table"); var rows; for (var t = 0; t < tables.length; i++) { alert(tables[t].className); if (tables[t].className == "software") { rows = tables[t].rows; for (var r = 0; r < rows.length; i++) { if (r % 2 == 0) { rows[t].className = "grayrow"; } } alert("meow"); } } } 778c15156a2b9c0e8a130f55ad60c7d38a48a4b0 1488 1487 2007-09-23T03:38:14Z Stevenlawrance 1 javascript text/javascript /* Any JavaScript here will be loaded for all users on every page load. */ // Highlight every other line in the software tables var orig_onload = window.onload; window.onload = function(e) { if (orig_onload != null) { orig_onload(e); } var tables = document.getElementsByTagName("table"); var rows; for (var t = 0; t < tables.length; i++) { alert(tables[t].className); if (tables[t].className == "software") { rows = tables[t].rows; for (var r = 0; r < rows.length; i++) { if (r % 2 == 0) { rows[t].className = "grayrow"; } } alert("meow"); } } } 1d1d6d36eea2ac50c44003d0950155e8e6c141dc 1489 1488 2007-09-23T03:39:21Z Stevenlawrance 1 javascript text/javascript /* Any JavaScript here will be loaded for all users on every page load. */ // Highlight every other line in the software tables var orig_onload = window.onload; window.onload = function(e) { if (orig_onload != null) { orig_onload(e); } var tables = document.getElementsByTagName("table"); var rows; for (var t = 0; t < tables.length; t++) { if (tables[t].className == "software") { rows = tables[t].rows; for (var r = 0; r < rows.length; r++) { if (r % 2 == 0) { rows[t].className = "grayrow"; } } } } } 96764602d2a562dc3467977372902f703adfd920 1490 1489 2007-09-23T03:39:58Z Stevenlawrance 1 javascript text/javascript /* Any JavaScript here will be loaded for all users on every page load. */ // Highlight every other line in the software tables var orig_onload = window.onload; window.onload = function(e) { if (orig_onload != null) { orig_onload(e); } var tables = document.getElementsByTagName("table"); var rows; for (var t = 0; t < tables.length; t++) { if (tables[t].className == "software") { rows = tables[t].rows; for (var r = 0; r < rows.length; r++) { if (r % 2 == 0) { rows[r].className = "grayrow"; } } } } } cf7109c89fb447aa8fd7a212d034e61a8d6cf0f7 1491 1490 2007-09-23T03:40:24Z Stevenlawrance 1 javascript text/javascript /* Any JavaScript here will be loaded for all users on every page load. */ // Highlight every other line in the software tables var orig_onload = window.onload; window.onload = function(e) { if (orig_onload != null) { orig_onload(e); } var tables = document.getElementsByTagName("table"); var rows; for (var t = 0; t < tables.length; t++) { if (tables[t].className == "software") { rows = tables[t].rows; for (var r = 0; r < rows.length; r++) { if (r % 2 == 1) { rows[r].className = "grayrow"; } } } } } 58df59648c049c53fca5728e6677a79955ef79cb MediaWiki:Common.css 8 1418 1485 2007-09-23T03:35:07Z Stevenlawrance 1 New page: /** CSS placed here will be applied to all skins */ table.software { border-width: 1px 1px 1px 1px; border-spacing: 0px; border-style: outset outset outset outset; border-color: b... css text/css /** CSS placed here will be applied to all skins */ table.software { border-width: 1px 1px 1px 1px; border-spacing: 0px; border-style: outset outset outset outset; border-color: black black black black; border-collapse: separate; background-color: white; } table.software td:first-child { vertical-align: top; padding-right: 1em; border-width: 0px 1px 0px 0px; border-style: inset inset inset inset; border-color: gray black gray gray; } tr.grayrow { background-color: #e3e3e3; } a01ddebd2b55cad1878521c6b2661359bf4b936a 1492 1485 2007-09-23T03:41:00Z Stevenlawrance 1 css text/css /** CSS placed here will be applied to all skins */ table.software { border-width: 1px 1px 1px 1px; border-spacing: 0px; border-style: outset outset outset outset; border-color: black black black black; border-collapse: separate; background-color: white; } table.software td:first-child { vertical-align: top; padding-right: 1em; border-width: 0px 1px 0px 0px; border-style: inset inset inset inset; border-color: gray black gray gray; } tr.grayrow { background-color: #eaeaea; } da246a479a066f69fb5e2586a5ca8a44e6e5170b 1501 1492 2007-09-23T05:28:44Z Stevenlawrance 1 css text/css /** CSS placed here will be applied to all skins */ table.software { border-width: 1px 1px 1px 1px; border-spacing: 0px; border-style: outset outset outset outset; border-color: black black black black; border-collapse: separate; background-color: white; } table.software td:first-child { vertical-align: top; padding-right: 1em; border-width: 0px 1px 0px 0px; border-style: inset inset inset inset; border-color: gray black gray gray; } table.software td:not(first-child) { vertical-align: top; } tr.grayrow { background-color: #eaeaea; } 325840fb2e313d23b4be4561afec1ad0a0b65d19 Steven Lawrance 0 1409 1504 1503 2007-09-23T05:43:38Z Stevenlawrance 1 /* Training */ wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-23'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|<h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|<h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|<h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|<h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux |- |valign="top" width="50%"|<h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments |} <br> ===Individual software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[Animation Master]]||Really lame animation program that I made for SLOS |- |[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions |} <br> ==Education and Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 9517356da3eb81d3beba099bce35281ddd770db0 1505 1504 2007-09-23T05:46:19Z Stevenlawrance 1 /* Education and Training */ wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-23'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|<h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|<h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|<h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|<h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux |- |valign="top" width="50%"|<h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments |} <br> ===Individual software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[Animation Master]]||Really lame animation program that I made for SLOS |- |[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions |} <br> ==Employment History== Quality Assurance January 2007 – present Engineer – API Wrote test plans and cases for new features in the Salesforce.com application Salesforce.com programming interface (API), received recognition for providing quick and comprehensive top-tier support for the API, and fixed some defects Database Admin September 2000 – July 2005 San Francisco AIDS Maintained a large 200-user multi-tenant three-tiered system used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support. I also gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them. In addition to that project, which I was responsible during my entire time at the Foundation, I assisted the other database administrator with the Foundation's other systems. These included adding features to an in-house customer relationship management (CRM) application and implementing large parts of the data conversion and customization of the Foundation's purchased donor relationship management (DRM) system. I also handled the DRM system's Internet-facing security using a locked-down Apache configuration and strict URL regular expressions. Other activities included championing HIPAA compliance, migrating client operating system data during the Windows XP transition using a multi-platform profile migration tool that I wrote, planning and rolling out Firefox as the default web browser to all foundation users successfully, evaluating and purchasing software, managing software licenses, training end-users, and administering databases, the Cisco-based network, servers, and the organization's backup system ResNet Consultant January 1999 – May 2000 Bryant University Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a custom-written Linux-based PHP web site Internet Developer January 1998 – May 1998 and September 1998 – May 1999 Bryant University Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) and wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the DirList2 open-source project Student Intern January 1996 – August 1997 Grapevine-Colleyville Provided award-winning hardware and software support, worked with wide-area Independent School network configurations, and wrote a networked printer driver to save thousands of District dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 717f92690e858e57fda2fda785814b34fe2f8d7f 1506 1505 2007-09-23T05:47:00Z Stevenlawrance 1 /* Individual software that I created */ wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-23'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|<h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|<h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|<h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|<h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux |- |valign="top" width="50%"|<h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[Animation Master]]||Really lame animation program that I made for SLOS |- |[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions |} <br> ==Employment History== Quality Assurance January 2007 – present Engineer – API Wrote test plans and cases for new features in the Salesforce.com application Salesforce.com programming interface (API), received recognition for providing quick and comprehensive top-tier support for the API, and fixed some defects Database Admin September 2000 – July 2005 San Francisco AIDS Maintained a large 200-user multi-tenant three-tiered system used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support. I also gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them. In addition to that project, which I was responsible during my entire time at the Foundation, I assisted the other database administrator with the Foundation's other systems. These included adding features to an in-house customer relationship management (CRM) application and implementing large parts of the data conversion and customization of the Foundation's purchased donor relationship management (DRM) system. I also handled the DRM system's Internet-facing security using a locked-down Apache configuration and strict URL regular expressions. Other activities included championing HIPAA compliance, migrating client operating system data during the Windows XP transition using a multi-platform profile migration tool that I wrote, planning and rolling out Firefox as the default web browser to all foundation users successfully, evaluating and purchasing software, managing software licenses, training end-users, and administering databases, the Cisco-based network, servers, and the organization's backup system ResNet Consultant January 1999 – May 2000 Bryant University Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a custom-written Linux-based PHP web site Internet Developer January 1998 – May 1998 and September 1998 – May 1999 Bryant University Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) and wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the DirList2 open-source project Student Intern January 1996 – August 1997 Grapevine-Colleyville Provided award-winning hardware and software support, worked with wide-area Independent School network configurations, and wrote a networked printer driver to save thousands of District dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 1e4034590ec3a27af4ea1a343d0168a2ad5b6cf8 1507 1506 2007-09-23T05:53:21Z Stevenlawrance 1 /* Employment History */ wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-23'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|<h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|<h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|<h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|<h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux |- |valign="top" width="50%"|<h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[Animation Master]]||Really lame animation program that I made for SLOS |- |[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions |} <br> ==Employment History== ===Salesforce.com=== *'''API Engineer''' *January 2007 to present ===San Francisco AIDS Foundation=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *Maintained a large 200-user multi-tenant three-tiered system used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support. I also gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them. In addition to that project, which I was responsible during my entire time at the Foundation, I assisted the other database administrator with the Foundation's other systems. These included adding features to an in-house customer relationship management (CRM) application and implementing large parts of the data conversion and customization of the Foundation's purchased donor relationship management (DRM) system. I also handled the DRM system's Internet-facing security using a locked-down Apache configuration and strict URL regular expressions. Other activities included championing HIPAA compliance, migrating client operating system data during the Windows XP transition using a multi-platform profile migration tool that I wrote, planning and rolling out Firefox as the default web browser to all foundation users successfully, evaluating and purchasing software, managing software licenses, training end-users, and administering databases, the Cisco-based network, servers, and the organization's backup system ===Bryant University=== *'''ResNet Consultant''' **January 1999 to May 2000 **Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a custom-written Linux-based PHP web site *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) and wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the DirList2 open-source project ===Ariesnet=== *''need to populate with Summer internship and 2000 work experience'' ===Grapevine-Colleyville Independent School District=== *'''Student Intern''' *January 1996 to August 1997 *Provided award-winning hardware and software support, worked with wide-areanetwork configurations, and wrote a networked printer driver to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 60381e871b237c7065a917d6408e2bf111999df0 1533 1507 2007-09-23T19:19:14Z 10.13.37.213 0 /* Software that I created */ wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-23'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|<h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|<h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|<h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|<h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux |- |valign="top" width="50%"|<h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[Animation Master]]||Really lame animation program that I made for SLOS |- |[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions |} <br> ==Employment History== ===Salesforce.com=== *'''API Engineer''' *January 2007 to present ===San Francisco AIDS Foundation=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *Maintained a large 200-user multi-tenant three-tiered system used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support. I also gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them. In addition to that project, which I was responsible during my entire time at the Foundation, I assisted the other database administrator with the Foundation's other systems. These included adding features to an in-house customer relationship management (CRM) application and implementing large parts of the data conversion and customization of the Foundation's purchased donor relationship management (DRM) system. I also handled the DRM system's Internet-facing security using a locked-down Apache configuration and strict URL regular expressions. Other activities included championing HIPAA compliance, migrating client operating system data during the Windows XP transition using a multi-platform profile migration tool that I wrote, planning and rolling out Firefox as the default web browser to all foundation users successfully, evaluating and purchasing software, managing software licenses, training end-users, and administering databases, the Cisco-based network, servers, and the organization's backup system ===Bryant University=== *'''ResNet Consultant''' **January 1999 to May 2000 **Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a custom-written Linux-based PHP web site *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) and wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the DirList2 open-source project ===Ariesnet=== *''need to populate with Summer internship and 2000 work experience'' ===Grapevine-Colleyville Independent School District=== *'''Student Intern''' *January 1996 to August 1997 *Provided award-winning hardware and software support, worked with wide-areanetwork configurations, and wrote a networked printer driver to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 e4d9c08633addc850f7ca7b5d63bd44c1949c24a 1536 1533 2007-09-24T05:37:53Z Stevenlawrance 1 wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-24'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|<h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|<h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|<h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|<h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux |- |valign="top" width="50%"|<h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[Animation Master]]||Really lame animation program that I made for SLOS |- |[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions |} <br> ==Employment History== ===Salesforce.com=== *'''API Engineer''' *January 2007 to present ===San Francisco AIDS Foundation=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *Maintained a large 200-user multi-tenant three-tiered system used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support. I also gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them. In addition to that project, which I was responsible during my entire time at the Foundation, I assisted the other database administrator with the Foundation's other systems. These included adding features to an in-house customer relationship management (CRM) application and implementing large parts of the data conversion and customization of the Foundation's purchased donor relationship management (DRM) system. I also handled the DRM system's Internet-facing security using a locked-down Apache configuration and strict URL regular expressions. Other activities included championing HIPAA compliance, migrating client operating system data during the Windows XP transition using a multi-platform profile migration tool that I wrote, planning and rolling out Firefox as the default web browser to all foundation users successfully, evaluating and purchasing software, managing software licenses, training end-users, and administering databases, the Cisco-based network, servers, and the organization's backup system ===Bryant University=== *'''ResNet Consultant''' **January 1999 to May 2000 **Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a custom-written Linux-based PHP web site *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) and wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the DirList2 open-source project ===Ariesnet=== *''need to populate with Summer internship and 2000 work experience'' ===Grapevine-Colleyville Independent School District=== *'''Student Intern''' *January 1996 to August 1997 *Provided award-winning hardware and software support, worked with wide-areanetwork configurations, and wrote a networked printer driver to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 e8d26da2da0fdec7d36582d0cffbec62adb03ea0 1547 1536 2007-09-24T08:11:14Z Stevenlawrance 1 /* Employment History */ wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-24'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|<h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|<h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|<h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|<h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux |- |valign="top" width="50%"|<h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[Animation Master]]||Really lame animation program that I made for SLOS |- |[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions |} <br> ==Employment History== ===Salesforce.com=== *'''API Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===San Francisco AIDS Foundation=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and donor relationship management systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Administered databases, the Cisco-based network, servers, and the organization's backup system ===Bryant University=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===Ariesnet=== *''need to populate with Summer internship and 2000 work experience'' ===Grapevine-Colleyville Independent School District=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 f2f3783c8c2dbec4b12dd0b4b626250cfafcde44 1550 1547 2007-09-24T08:26:27Z Stevenlawrance 1 /* Employment History */ wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-24'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|<h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|<h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|<h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|<h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux |- |valign="top" width="50%"|<h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[Animation Master]]||Really lame animation program that I made for SLOS |- |[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions |} <br> ==Employment History== ===Salesforce.com=== *'''API Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===San Francisco AIDS Foundation=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and donor relationship management systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===Bryant University=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===Ariesnet=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===Grapevine-Colleyville Independent School District=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 503dc9d47a0ca2d64190d7d1cae4bfb000420ce0 1551 1550 2007-09-24T08:27:30Z Stevenlawrance 1 wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-24'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|<h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|<h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[Bryant University ResNet Online]] *[[Bryant University Guest Pass]] |- |valign="top" width="50%"|<h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|<h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[Animation Master]]||Really lame animation program that I made for SLOS |- |[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions |} <br> ==Employment History== ===Salesforce.com=== *'''API Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===San Francisco AIDS Foundation=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and donor relationship management systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===Bryant University=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===Ariesnet=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===Grapevine-Colleyville Independent School District=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 9d37269c81ba09ca93a3a1e3e60743627922eac5 1552 1551 2007-09-24T08:28:17Z Stevenlawrance 1 wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-24'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|<h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|<h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|<h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[Animation Master]]||Really lame animation program that I made for SLOS |- |[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions |} <br> ==Employment History== ===Salesforce.com=== *'''API Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===San Francisco AIDS Foundation=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and donor relationship management systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===Bryant University=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===Ariesnet=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===Grapevine-Colleyville Independent School District=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 43b32b53622c80e24d2c00e5afaf605e13e4c991 1553 1552 2007-09-24T08:31:54Z Stevenlawrance 1 /* San Francisco AIDS Foundation */ wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''At this moment, this page is under construction. This notice will go away by 2007-09-24'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|<h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|<h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|<h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[Animation Master]]||Really lame animation program that I made for SLOS |- |[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions |} <br> ==Employment History== ===Salesforce.com=== *'''API Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===San Francisco AIDS Foundation=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===Bryant University=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===Ariesnet=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===Grapevine-Colleyville Independent School District=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 9522129861c97e36a77344915d43b469f991c897 1554 1553 2007-09-24T08:33:37Z Stevenlawrance 1 wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress. This notice will go away by 2007-09-30'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|<h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|<h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|<h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[Animation Master]]||Really lame animation program that I made for SLOS |- |[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions |} <br> ==Employment History== ===Salesforce.com=== *'''API Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===San Francisco AIDS Foundation=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===Bryant University=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===Ariesnet=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===Grapevine-Colleyville Independent School District=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 3d795b62a9b778e9cd0bdc69f5a57456f9d83a20 Linux server services 0 1415 1508 1439 2007-09-23T06:29:11Z Stevenlawrance 1 wikitext text/x-wiki *Apache HTTP server 2.0, 2.2, including mod_rewrite *Novell AppArmor security *Squid web proxy server, including ProStat reporting *OpenLDAP directory server *MySQL database server *Postfox, Cyrus IMAPd, and SpamAssassin for email *CUPS for printing *GNU Mailman email list server *NTP and Samba file sharing *Mozilla Bugzilla *OpenRADUIS authentication server 3b61482d16bcec28bfd740885f527a461016a47b File:Program-fatrecover.png 6 1419 1509 2007-09-23T06:58:51Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 FAT Recover 0 1420 1510 2007-09-23T06:59:20Z Stevenlawrance 1 New page: ==FAT Recover 0.9.0== Manually recover files from bad floppy disks using FAT Recover and dd. By telling you the locations of all the files on your disk or disk image, you can use dd to ex... wikitext text/x-wiki ==FAT Recover 0.9.0== Manually recover files from bad floppy disks using FAT Recover and dd. By telling you the locations of all the files on your disk or disk image, you can use dd to extract the necessary parts. You could also use grep on a disk image to hunt for file header signatures for really messed-up disks. If anyone is interested in making a front end in something like GTK+/GNOME, please let me know. [https://www.moonlightdesign.org/steve/programs/fatrecover-0.9.0.tar.gz Download] [[Image:Program-fatrecover.png]] Screenshot of running FAT Recover on an image of the first megabyte of my Dad's laptop before I ran mkdosfs on /dev/hda1 and reinstalled Windows 95 OSR2. f84997b05a9e28ed73b68db68f53a0563b0b3588 File:Program-256dll.png 6 1421 1511 2007-09-23T07:27:23Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Program-activemailconsole.png 6 1422 1512 2007-09-23T07:27:31Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Program-ads.png 6 1423 1513 2007-09-23T07:27:38Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Program-catsetup.png 6 1424 1514 2007-09-23T07:27:52Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Program-dofcd.png 6 1425 1515 2007-09-23T07:28:03Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Program-grapher.png 6 1426 1516 2007-09-23T07:28:25Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Program-hc1.png 6 1427 1517 2007-09-23T07:28:33Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 1539 1517 2007-09-24T07:56:32Z Stevenlawrance 1 uploaded a new version of "[[Image:Program-hc1.png]]" wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Program-hc2.png 6 1428 1518 2007-09-23T07:28:40Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 1540 1518 2007-09-24T07:56:50Z Stevenlawrance 1 uploaded a new version of "[[Image:Program-hc2.png]]" wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Program-hc3.png 6 1429 1519 2007-09-23T07:28:48Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 1541 1519 2007-09-24T07:57:34Z Stevenlawrance 1 uploaded a new version of "[[Image:Program-hc3.png]]" wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Program-hc4.png 6 1430 1520 2007-09-23T07:28:59Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 1542 1520 2007-09-24T07:57:42Z Stevenlawrance 1 uploaded a new version of "[[Image:Program-hc4.png]]" wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Program-horsesforwindows1 0.png 6 1431 1521 2007-09-23T07:29:08Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Program-kittycatcomm.png 6 1432 1522 2007-09-23T07:29:16Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Program-lpd1.png 6 1433 1523 2007-09-23T07:29:30Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Program-lpd2.png 6 1434 1524 2007-09-23T07:29:41Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Program-lpd3.png 6 1435 1525 2007-09-23T07:29:52Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Program-mcisendstring.png 6 1436 1526 2007-09-23T07:29:59Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Program-mcisendstring2.png 6 1437 1527 2007-09-23T07:30:07Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Program-screenwindow.png 6 1438 1528 2007-09-23T07:30:16Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Program-screenwindowctl.png 6 1439 1529 2007-09-23T07:30:33Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Program-tracktrek1.png 6 1440 1530 2007-09-23T07:30:55Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Program-tracktrek2.png 6 1441 1531 2007-09-23T07:31:02Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Program-tracktrek3.png 6 1442 1532 2007-09-23T07:31:09Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Main Page 0 1404 1534 1426 2007-09-24T05:29:45Z 10.13.37.213 0 wikitext text/x-wiki Welcome to Moonlight Design -- the personal web site of Henry Lamb and Steven Lawrance *[[Henry Lamb]] *[[Steven Lawrance]] This server also hosts several projects *[https://www.moonlightdesign.org/thunderforce/ Thunderforce] *[https://www.moonlightdesign.org/urllock/ URL Lock] *[https://www.moonlightdesign.org/dirlist/ DirList] *Teacher's Pet Firefox tab sharing extension (coming soon; extension is already written, but not posted online yet..) *[[Serendipity|Team Serendipity Master of Software Engineering (MSE) studio project]] *[[Personal financial process]] - A personal finance process that places you in control of your money *More to come.. 24201fbf4dc3b59412524b232a530b1381fa3026 Home Control 0 1444 1537 2007-09-24T07:21:33Z Stevenlawrance 1 New page: {|border="0" |valign="top"|By controlling the now-obsolete CP290 computer X-10 device, this program lets users control X-10 appliances directly and through schedules. This program permits... wikitext text/x-wiki {|border="0" |valign="top"|By controlling the now-obsolete CP290 computer X-10 device, this program lets users control X-10 appliances directly and through schedules. This program permits full use of the CP290's capabilities as it was written specifically for this device, though it did not implement a user interface for the CP290's "icon" memory, which was of dubious utility anyway. As far as I am aware, this program was the first Win32-based program to control the CP290 device as well as the only CP290 control program that implements non-destructive base unit house code changes. Because it was designed for the CP290, Home Control supports the control of multiple devices in the same house code simultaneously both in direct commands and in schedules, which was a rarity in CP290 control programs at the time, even though the device supports it. The architecture of Home Control splits the CP290 driver from the user interface, permitting other programs to use the DLL library to control the CP290. As far as I know, Home Control is the only front end that uses its CP290 library. This program was written during my junior year in high school for an honors physics class. I entered it into the Fort Worth Science Fair, where it won four awards. This made it eligible for entry in the Texas State Science Fair in Austin, Texas, where it was featured amongst many other innovative software projects at the time. Similar to the [[LPD]] processor for HP PCL that I would write later, I wrote this software from the communications specifications that came with the CP290 device. Unfortunately, modern hardware products typically no longer ship with such documentation. [[Image:Program-hc1.png|top]] [[Image:Program-hc3.png]] |valign="top"|[[Image:Program-hc2.png]] [[Image:Program-hc4.png]] |} 3e2e47fae3d78645a41b1e54e10c59ff43e38d7c 1538 1537 2007-09-24T07:34:56Z Stevenlawrance 1 wikitext text/x-wiki {|border="0" |valign="top"|By controlling the now-obsolete CP290 computer X-10 device, this program lets users control X-10 appliances directly and through schedules. '''Download coming soon''' This program permits full use of the CP290's capabilities as it was written specifically for this device, though it did not implement a user interface for the CP290's "icon" memory, which was of dubious utility anyway. As far as I am aware, this program was the first Win32-based program to control the CP290 device as well as the only CP290 control program that implements non-destructive base unit house code changes. Because it was designed for the CP290, Home Control supports the control of multiple devices in the same house code simultaneously both in direct commands and in schedules, which was a rarity in CP290 control programs at the time, even though the device supports it. The architecture of Home Control splits the CP290 driver from the user interface, permitting other programs to use the DLL library to control the CP290. As far as I know, Home Control is the only front end that uses its CP290 library. This program was written during my junior year in high school for an honors physics class. I entered it into the Fort Worth Science Fair, where it won four awards. This made it eligible for entry in the Texas State Science Fair in Austin, Texas, where it was featured amongst many other innovative software projects at the time. Similar to the [[LPD]] processor for HP PCL that I would write later, I wrote this software from the communications specifications that came with the CP290 device. Unfortunately, modern hardware products typically no longer ship with such documentation. [[Image:Program-hc1.png|top]] [[Image:Program-hc3.png]] |valign="top"|[[Image:Program-hc2.png]] [[Image:Program-hc4.png]] |} 619bd551e475bffdad22626c435858b8b8cbc4b9 1545 1538 2007-09-24T07:59:56Z Stevenlawrance 1 wikitext text/x-wiki {|border="0" |valign="top"|By controlling the now-obsolete CP290 computer X-10 device, this program lets users control X-10 appliances directly and through schedules. '''Download coming soon''' This program permits full use of the CP290's capabilities as it was written specifically for this device, though it did not implement a user interface for the CP290's "icon" memory, which was of dubious utility anyway. As far as I am aware, this program was the first Win32-based program to control the CP290 device as well as the only CP290 control program that implements non-destructive base unit house code changes. Because it was designed for the CP290, Home Control supports the control of multiple devices in the same house code simultaneously both in direct commands and in schedules, which was a rarity in CP290 control programs at the time, even though the device supports it. The architecture of Home Control splits the CP290 driver from the user interface, permitting other programs to use the DLL library to control the CP290. As far as I know, Home Control is the only front end that uses its CP290 library. This program was written during my junior year in high school for an honors physics class. I entered it into the Fort Worth Science Fair, where it won four awards. This made it eligible for entry in the Texas State Science Fair in Austin, Texas, where it was featured amongst many other innovative software projects at the time. Similar to the [[LPD]] processor for HP PCL that I would write later, I wrote this software from the communications specifications that came with the CP290 device. Unfortunately, modern hardware products typically no longer ship with such documentation. {| |[[Image:Program-hc1.png|top]] [[Image:Program-hc5.png]] |[[Image:Program-hc3.png]] |} |valign="top"|[[Image:Program-hc2.png]] [[Image:Program-hc4.png]] [[Image:Program-hc6.png]] |} 34834ca818b590430379af2018733ab5aa21b691 1546 1545 2007-09-24T08:00:53Z Stevenlawrance 1 wikitext text/x-wiki {|border="0" |valign="top"|By controlling the now-obsolete CP290 computer X-10 device, this program lets users control X-10 appliances directly and through schedules. '''Download coming soon''' This software was originally released in 1996, and an enhanced user interface, pictured in the screen shots on this page, was released in 1998. This program permits full use of the CP290's capabilities as it was written specifically for this device, though it did not implement a user interface for the CP290's "icon" memory, which was of dubious utility anyway. As far as I am aware, this program was the first Win32-based program to control the CP290 device as well as the only CP290 control program that implements non-destructive base unit house code changes. Because it was designed for the CP290, Home Control supports the control of multiple devices in the same house code simultaneously both in direct commands and in schedules, which was a rarity in CP290 control programs at the time, even though the device supports it. The architecture of Home Control splits the CP290 driver from the user interface, permitting other programs to use the DLL library to control the CP290. As far as I know, Home Control is the only front end that uses its CP290 library. This program was written during my junior year in high school for an honors physics class. I entered it into the Fort Worth Science Fair, where it won four awards. This made it eligible for entry in the Texas State Science Fair in Austin, Texas, where it was featured amongst many other innovative software projects at the time. Similar to the [[LPD]] processor for HP PCL that I would write later, I wrote this software from the communications specifications that came with the CP290 device. Unfortunately, modern hardware products typically no longer ship with such documentation. {| |[[Image:Program-hc1.png|top]] [[Image:Program-hc5.png]] |[[Image:Program-hc3.png]] |} |valign="top"|[[Image:Program-hc2.png]] [[Image:Program-hc4.png]] [[Image:Program-hc6.png]] |} b1adb5a81006fd08edf6fc7a8bbd675266a1c6b8 1548 1546 2007-09-24T08:12:43Z Stevenlawrance 1 wikitext text/x-wiki {|border="0" |valign="top"|By controlling the now-obsolete [http://www.smarthome.com/manuals/MAN-1130_31p.pdf CP290 computer X-10 device], this program lets users control X-10 appliances directly and through schedules. '''Download coming soon''' This software was originally released in 1996, and an enhanced user interface, pictured in the screen shots on this page, was released in 1998. This program permits full use of the CP290's capabilities as it was written specifically for this device, though it did not implement a user interface for the CP290's "icon" memory, which was of dubious utility anyway. As far as I am aware, this program was the first Win32-based program to control the CP290 device as well as the only CP290 control program that implements non-destructive base unit house code changes. Because it was designed for the CP290, Home Control supports the control of multiple devices in the same house code simultaneously both in direct commands and in schedules, which was a rarity in CP290 control programs at the time, even though the device supports it. The architecture of Home Control splits the CP290 driver from the user interface, permitting other programs to use the DLL library to control the CP290. As far as I know, Home Control is the only front end that uses its CP290 library. This program was written during my junior year in high school for an honors physics class. I entered it into the Fort Worth Science Fair, where it won four awards. This made it eligible for entry in the Texas State Science Fair in Austin, Texas, where it was featured amongst many other innovative software projects at the time. Similar to the [[LPD]] processor for HP PCL that I would write later, I wrote this software from the [http://www.smarthome.com/manuals/MAN-1130_31p.pdf communications specifications] that came with the CP290 device. Unfortunately, modern hardware products typically no longer ship with such documentation. {| |[[Image:Program-hc1.png|top]] [[Image:Program-hc5.png]] |[[Image:Program-hc3.png]] |} |valign="top"|[[Image:Program-hc2.png]] [[Image:Program-hc4.png]] [[Image:Program-hc6.png]] |} 162eb7e3274c7b11be74f5d32184fa81fbc2928f 1549 1548 2007-09-24T08:13:22Z Stevenlawrance 1 wikitext text/x-wiki {|border="0" |valign="top"|By controlling the now-obsolete [http://www.smarthome.com/manuals/MAN-1130_31p.pdf CP290 computer X-10 device], this program lets users control X-10 appliances directly and through schedules. '''Download coming soon''' This software was originally released in 1996, and an enhanced user interface, pictured in the screen shots on this page, was released in 1998. This program permits full use of the CP290's capabilities as it was written specifically for this device, though it did not implement a user interface for the CP290's "icon" memory, which was of dubious utility anyway. As far as I am aware, this program was the first Win32-based program to control the CP290 device as well as the only CP290 control program that implements non-destructive base unit house code changes. Because it was designed for the CP290, Home Control supports the control of multiple devices in the same house code simultaneously both in direct commands and in schedules, which was a rarity in CP290 control programs at the time, even though the device supports it. The architecture of Home Control splits the CP290 driver from the user interface, permitting other programs to use the DLL library to control the CP290. As far as I know, Home Control is the only front end that uses its CP290 library. This program was written during my junior year in high school for an honors physics class. I entered it into the Fort Worth Science Fair, where it won four awards. This made it eligible for entry in the Texas State Science Fair in Austin, Texas, where it was featured amongst many other innovative software projects at the time. Similar to the [[LPD]] processor for HP PCL that I wrote later, I wrote this software from the [http://www.smarthome.com/manuals/MAN-1130_31p.pdf communications specifications] that came with the CP290 device. Unfortunately, modern hardware products typically no longer ship with such documentation. {| |[[Image:Program-hc1.png|top]] [[Image:Program-hc5.png]] |[[Image:Program-hc3.png]] |} |valign="top"|[[Image:Program-hc2.png]] [[Image:Program-hc4.png]] [[Image:Program-hc6.png]] |} 6c3a46a766fac9b733b7c68ffd2c70aa5b65e10e File:Program-hc5.png 6 1445 1543 2007-09-24T07:57:49Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Program-hc6.png 6 1446 1544 2007-09-24T07:58:11Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Steven Lawrance 0 1409 1555 1554 2007-09-24T08:34:32Z Stevenlawrance 1 wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|<h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|<h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework AppExchange packages in Salesforce.com |valign="top" width="50%"|<h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[Animation Master]]||Really lame animation program that I made for SLOS |- |[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions |} <br> ==Employment History== ===Salesforce.com=== *'''API Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===San Francisco AIDS Foundation=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===Bryant University=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===Ariesnet=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===Grapevine-Colleyville Independent School District=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 5f5e1e1a42a1d55fe97b0445f3ef3ea4b5e1c6c7 1556 1555 2007-09-24T08:45:09Z Stevenlawrance 1 wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|<h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|<h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of the following software **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[Animation Master]]||Really lame animation program that I made for SLOS |- |[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions |} <br> ==Employment History== ===Salesforce.com=== *'''API Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===San Francisco AIDS Foundation=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===Bryant University=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===Ariesnet=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===Grapevine-Colleyville Independent School District=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 f11537047285174a2123b1687d5d043f0c857f8a 1557 1556 2007-09-24T08:45:37Z Stevenlawrance 1 wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|<h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|<h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[Animation Master]]||Really lame animation program that I made for SLOS |- |[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions |} <br> ==Employment History== ===Salesforce.com=== *'''API Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===San Francisco AIDS Foundation=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===Bryant University=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===Ariesnet=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===Grapevine-Colleyville Independent School District=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 6c89b7e249735bf501777c85326c8911eabe6754 1558 1557 2007-09-24T08:45:47Z Stevenlawrance 1 wikitext text/x-wiki Welcome to the web site of software consultant and [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests and Consulting Services== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|<h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|<h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[Animation Master]]||Really lame animation program that I made for SLOS |- |[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions |} <br> ==Employment History== ===Salesforce.com=== *'''API Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===San Francisco AIDS Foundation=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===Bryant University=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===Ariesnet=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===Grapevine-Colleyville Independent School District=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 b557ba05ebe493f70be15a98fa68156c57aa1bcb 1559 1558 2007-09-24T14:06:29Z Stevenlawrance 1 wikitext text/x-wiki Welcome to the web site of [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|<h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|<h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[Animation Master]]||Really lame animation program that I made for SLOS |- |[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions |} <br> ==Employment History== ===Salesforce.com=== *'''API Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===San Francisco AIDS Foundation=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===Bryant University=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===Ariesnet=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===Grapevine-Colleyville Independent School District=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 bc9ded3e3a84db24656e302baf56013993f0ad37 1567 1559 2007-09-24T15:06:40Z Stevenlawrance 1 /* Team software */ wikitext text/x-wiki Welcome to the web site of [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|<h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|<h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[Animation Master]]||Really lame animation program that I made for SLOS |- |[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions |} <br> ==Employment History== ===Salesforce.com=== *'''API Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===San Francisco AIDS Foundation=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===Bryant University=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===Ariesnet=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===Grapevine-Colleyville Independent School District=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 d301faac5571c0cb410210935e4a3eadcc64b345 1573 1567 2007-09-24T16:23:01Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki Welcome to the web site of [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|<h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|<h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[Animation Master]]||Really lame animation program that I made for SLOS |- |[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions |} <br> ==Employment History== ===Salesforce.com=== *'''API Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===San Francisco AIDS Foundation=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===Bryant University=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===Ariesnet=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===Grapevine-Colleyville Independent School District=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 164d8f1625d5ed237569b66eaeb982aa236e096a 1576 1573 2007-09-26T15:34:46Z Stevenlawrance 1 /* Employment History */ wikitext text/x-wiki Welcome to the web site of [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|<h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|<h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[Animation Master]]||Really lame animation program that I made for SLOS |- |[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the snmpset() function to PHP 3.0.12 and PHP4 Beta2 so that ResNet Online could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions |} <br> ==Employment History== ===Salesforce.com=== *'''API Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===San Francisco AIDS Foundation=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===Ariesnet=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===Bryant University=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===Grapevine-Colleyville Independent School District=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 4c7d27502cad17619a1399c3c7ee046b0c09bb5a 1577 1576 2007-09-26T15:39:12Z Stevenlawrance 1 /* Software and project contributions */ wikitext text/x-wiki Welcome to the web site of [http://www.mse.cs.cmu.edu/ software engineering master] '''Steven Lawrance'''. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|<h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|<h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[Animation Master]]||Really lame animation program that I made for SLOS |- |[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to PHP 3.0.12 and PHP4 Beta2 so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions |} <br> ==Employment History== ===Salesforce.com=== *'''API Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===San Francisco AIDS Foundation=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===Ariesnet=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===Bryant University=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===Grapevine-Colleyville Independent School District=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 0fe5963353d7ee1436678b4e89d8c71bd77acaac 1585 1577 2007-09-29T21:07:42Z Stevenlawrance 1 wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|<h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|<h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[Animation Master]]||Really lame animation program that I made for SLOS |- |[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to PHP 3.0.12 and PHP4 Beta2 so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions |} <br> ==Employment History== ===Salesforce.com=== *'''API Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===San Francisco AIDS Foundation=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===Ariesnet=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===Bryant University=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===Grapevine-Colleyville Independent School District=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): 806200565301847 798db5208e552fc5f6c6be4df2a4cc3458fac83d 1586 1585 2007-09-29T21:25:08Z Stevenlawrance 1 /* Certification */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|<h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|<h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[Animation Master]]||Really lame animation program that I made for SLOS |- |[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to PHP 3.0.12 and PHP4 Beta2 so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions |} <br> ==Employment History== ===Salesforce.com=== *'''API Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===San Francisco AIDS Foundation=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===Ariesnet=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===Bryant University=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===Grapevine-Colleyville Independent School District=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE; older version): [https://www.moonlightdesign.org/steve/rhce.html 806200565301847] cfbf08591bd9eb2f43abd61f9575e01f812dd225 1587 1586 2007-09-29T21:26:07Z Stevenlawrance 1 /* Certification */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|<h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|<h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[Animation Master]]||Really lame animation program that I made for SLOS |- |[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to PHP 3.0.12 and PHP4 Beta2 so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions |} <br> ==Employment History== ===Salesforce.com=== *'''API Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===San Francisco AIDS Foundation=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===Ariesnet=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===Bryant University=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===Grapevine-Colleyville Independent School District=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE for 6.2): [https://www.moonlightdesign.org/steve/rhce.html 806200565301847] 81d9926d4d186211f4b32daeb8a466ad664dd38e 1588 1587 2007-09-29T21:27:54Z Stevenlawrance 1 /* Carnegie Mellon University */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|<h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|<h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[Animation Master]]||Really lame animation program that I made for SLOS |- |[[FAT Checker]]||Think of it as a /sbin/fsck for SLOS FATs |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to PHP 3.0.12 and PHP4 Beta2 so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions |} <br> ==Employment History== ===Salesforce.com=== *'''API Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===San Francisco AIDS Foundation=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===Ariesnet=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===Bryant University=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===Grapevine-Colleyville Independent School District=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE for 6.2): [https://www.moonlightdesign.org/steve/rhce.html 806200565301847] ad9b28e97354f6f92428557254960c8e97adc8dc 1589 1588 2007-09-29T21:29:00Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|<h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Middleware software development *Custom software development *Software process metrics, measurements, and analysis |valign="top" width="50%"|<h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to PHP 3.0.12 and PHP4 Beta2 so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions |} <br> ==Employment History== ===Salesforce.com=== *'''API Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===San Francisco AIDS Foundation=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===Ariesnet=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===Bryant University=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===Grapevine-Colleyville Independent School District=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE for 6.2): [https://www.moonlightdesign.org/steve/rhce.html 806200565301847] 09d0884dba1b3842f896742c162437bfe4dea423 1590 1589 2007-09-29T21:31:03Z Stevenlawrance 1 wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"|<h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to PHP 3.0.12 and PHP4 Beta2 so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions |} <br> ==Employment History== ===Salesforce.com=== *'''API Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===San Francisco AIDS Foundation=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===Ariesnet=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===Bryant University=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===Grapevine-Colleyville Independent School District=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE for 6.2): [https://www.moonlightdesign.org/steve/rhce.html 806200565301847] 880fceb273e5fc3beecb88666776ec98e97950fc 1591 1590 2007-09-29T21:31:24Z Stevenlawrance 1 wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page IE URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to PHP 3.0.12 and PHP4 Beta2 so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions |} <br> ==Employment History== ===Salesforce.com=== *'''API Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===San Francisco AIDS Foundation=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===Ariesnet=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===Bryant University=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===Grapevine-Colleyville Independent School District=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE for 6.2): [https://www.moonlightdesign.org/steve/rhce.html 806200565301847] cb3752a23221dd5732d1877956678299245ff523 1592 1591 2007-09-29T21:31:43Z Stevenlawrance 1 wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to PHP 3.0.12 and PHP4 Beta2 so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions |} <br> ==Employment History== ===Salesforce.com=== *'''API Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===San Francisco AIDS Foundation=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===Ariesnet=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===Bryant University=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===Grapevine-Colleyville Independent School District=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''RedHat Certified Engineer''' (RHCE for 6.2): [https://www.moonlightdesign.org/steve/rhce.html 806200565301847] ca3579d9637b378349436b5a2a8afcb5a0b936b6 1593 1592 2007-09-29T21:35:35Z Stevenlawrance 1 /* Certification */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to PHP 3.0.12 and PHP4 Beta2 so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions |} <br> ==Employment History== ===Salesforce.com=== *'''API Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===San Francisco AIDS Foundation=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===Ariesnet=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===Bryant University=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===Grapevine-Colleyville Independent School District=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 5a0106e9f36d14f4120f282eb0f666817422214c 1594 1593 2007-09-29T21:36:35Z Stevenlawrance 1 /* Bryant University */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to PHP 3.0.12 and PHP4 Beta2 so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions |} <br> ==Employment History== ===Salesforce.com=== *'''API Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===San Francisco AIDS Foundation=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===Ariesnet=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===Bryant University=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===Grapevine-Colleyville Independent School District=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===Bryant University=== *'''Bachelor of Science in Business Administration''' *Minor in Computer Information Systems *Smithfield, RI *'''Graduation:''' May 2000 *AACSB Accredited *'''Focus areas studied:''' Computer information systems with a minor in applied business statistics *'''Grade point average:''' Graduated summa cum laude with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of Bryant PRIDE for more than a year and conducted a Linux installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] e4def3e3c8fddc3307a61c78c50499b58c20613b 1595 1594 2007-09-29T21:49:46Z Stevenlawrance 1 /* Bryant University */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to PHP 3.0.12 and PHP4 Beta2 so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions |} <br> ==Employment History== ===Salesforce.com=== *'''API Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===San Francisco AIDS Foundation=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===Ariesnet=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===Bryant University=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===Grapevine-Colleyville Independent School District=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===Carnegie Mellon University=== *'''Master of Software Engineering''', Institute of Software Research *Pittsburgh, PA *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''Quality point average:''' Graduated with 4.03 out of 4.00, which is a weighted GPA, due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''Grade point average:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a [http://en.wikipedia.org/wiki/GPA#United_States grade point average (GPA)] of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 856ac5fb1413072cb4167460473f758190588870 1596 1595 2007-09-29T21:57:49Z Stevenlawrance 1 /* Education and Training */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to PHP 3.0.12 and PHP4 Beta2 so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions |} <br> ==Employment History== ===Salesforce.com=== *'''API Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===San Francisco AIDS Foundation=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===Ariesnet=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===Bryant University=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===Grapevine-Colleyville Independent School District=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 75e86b50ca25c0f65e864cee147007508870d63b 1597 1596 2007-09-29T22:01:26Z Stevenlawrance 1 /* Employment History */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to PHP 3.0.12 and PHP4 Beta2 so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions |} <br> ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 0795b3ec1f201f713a75d00df2c422570f59028c 1598 1597 2007-09-29T22:37:36Z Stevenlawrance 1 /* Software Project Experience */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" !Name !Description !Technologies |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://www.eclipse.org/ Eclipse], [http://en.wikipedia.org/wiki/Standard_Widget_Toolkit SWT], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/JNI JNI] |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/JNI JNI], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/IIS IIS], [http://en.wikipedia.org/wiki/Component_object_model COM] |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS] |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/Mysql MySQL] |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/Xpcom XPCOM] |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||[http://en.wikipedia.org/wiki/BASIC_Stamp Parallax BASIC Stamp], [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot] |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/Xpcom XPCOM] |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||[http://en.wikipedia.org/wiki/Php PHP], [http://en.wikipedia.org/wiki/Mysql MySQL], [http://en.wikipedia.org/wiki/Javascript JavaScript] |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software" |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98 |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily |- |[[Horses]]||A fun horse racing game that I made a long time ago |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub) |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now) |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP) |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems) |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3. |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to PHP 3.0.12 and PHP4 Beta2 so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions |} <br> ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 4dfa19ad53a808830211caf6aeaf1b1fa0229792 File:Applet-login.png 6 1447 1560 2007-09-24T14:41:58Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Lynx-vm-spellcheckertest.png 6 1448 1561 2007-09-24T14:42:12Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Reporting.png 6 1449 1562 2007-09-24T14:43:19Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Client.png 6 1450 1563 2007-09-24T14:43:51Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Pdfgeneration.png 6 1451 1564 2007-09-24T14:44:19Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:ReggieCISServers.png 6 1453 1566 2007-09-24T15:01:59Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Reggie/CIS 0 1454 1568 2007-09-24T16:05:19Z Stevenlawrance 1 New page: [[Image:Applet-login.png|right]] Reggie/CIS was a large 200-user multi-tenant three-tiered system that was used by all [http://hab.hrsa.gov/ Ryan White CARE]-funded [http://en.wikipedia.or... wikitext text/x-wiki [[Image:Applet-login.png|right]] Reggie/CIS was a large 200-user multi-tenant three-tiered system that was used by all [http://hab.hrsa.gov/ Ryan White CARE]-funded [http://en.wikipedia.org/wiki/Aids AIDS] service organizations in [http://en.wikipedia.org/wiki/San_francisco San Francisco, California] in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] (DPH) [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years. At its peak, this system was used by more than 100 organizations. It was eventually replaced with a third-party solution as a result of reduced commitment and institutional knowledge for Reggie at the DPH. ==Motivations== Named after its champion, [http://groups.msn.com/ReggieWilliamsExhibit Reggie Williams], Reggie/CIS successfully centralized client registration data for [http://dir.yahoo.com/Regional/U_S__States/California/Metropolitan_Areas/San_Francisco_Bay_Area/Health/AIDS_HIV/Organizations/ AIDS service organizations in San Francisco], substantially easing the registration process for people living with HIV or AIDS who chose to share their registration data with other Reggie organizations when vising previously-unvisited AIDS service organizations. This meant that documents such as the letter of HIV diagnosis and [http://en.wikipedia.org/wiki/CD4 CD4] count information were entered into the system by one organization and then immediately available to all other AIDS service organizations that the client registered with. Before Reggie/CIS, clients would need to present their paperwork at every AIDS service organization that they visit when initially registering, and San Francisco is notorious for having many small, specialized AIDS service organizations for various needs such as medical care, housing subsidies, food, legal advice, disability benefits counseling, mental health, and medication adherence assistance. Reggie/CIS put each client in control of their data, permitting clients to share or unshare their data with other Reggie organizations at any time. For the DPH, the centralized data in Reggie substantially eased reporting requirements for the federal, state, and county governments. The data was actively kept unduplicated for reporting purposes while respecting each client's data sharing preferences, enabling duplication of data at the agency level while keeping clients unduplicated in reports for accurate reporting. The San Francisco AIDS Foundation and two other collaborating partners used the "CIS" part of the Reggie/CIS system, which built upon the Reggie application and database to provide customized data applications suited for the collaboration's needs. This included data entry screens and reports for rental subsidies, volunteers, care plans, progress notes, and other needs. I was the active maintainer, administrator, and software engineer of the CIS extension from 2001 to 2005, though my colleague at the DPH and I often worked on each other's part of the system when implementing new functionality. ==Architecture== Reggie/CIS consisted of two main systems -- data entry and reporting. The data entry system was a [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing] [http://en.wikipedia.org/wiki/Fat_client fat client] that connected with the middle-tier [http://en.wikipedia.org/wiki/Business_logic business logic] server using the [http://en.wikipedia.org/wiki/Corba common object request broker architecture] (CORBA). The middle tier connected to a [http://en.wikipedia.org/wiki/Microsoft_SQL_Server Microsoft SQL Server] database using a third party JDBC driver (Microsoft did not offer a free JDBC driver during most of Reggie/CIS's lifetime). The database consisted of approximately 100 tables, a moderate number of stored procedures, and one-way replication to two reporting database servers. Reggie/CIS's reporting system was originally written in [http://en.wikipedia.org/wiki/Vbscript Microsoft Visual Basic Script] (VBScript) and published to a closed network using [http://en.wikipedia.org/wiki/Active_Server_Pages Microsoft classic Active Server Pages] (ASP). A CIS-centric deployment view of the system is depicted in the following diagram: [[Image:ReggieCISServers.png]] The reporting system also followed a three-tiered pattern: [[Image:Reporting.png]] The data entry client ran as a Java applet and, later, as a Java WebStart application. Installation of the applet was made easy with a web-based multi-stage JavaScript-based installer, though its ease of use was achieved with a rather complex implementation. When the applet starts up, it obtains a reference to a business server object that it uses for object manipulation when the user logs in. This is depicted in the following diagram: [[Image:Client.png]] 509b551a193f2d3e5aa6729e20653185b6fb1b35 1569 1568 2007-09-24T16:06:48Z Stevenlawrance 1 /* Architecture */ wikitext text/x-wiki [[Image:Applet-login.png|right]] Reggie/CIS was a large 200-user multi-tenant three-tiered system that was used by all [http://hab.hrsa.gov/ Ryan White CARE]-funded [http://en.wikipedia.org/wiki/Aids AIDS] service organizations in [http://en.wikipedia.org/wiki/San_francisco San Francisco, California] in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] (DPH) [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years. At its peak, this system was used by more than 100 organizations. It was eventually replaced with a third-party solution as a result of reduced commitment and institutional knowledge for Reggie at the DPH. ==Motivations== Named after its champion, [http://groups.msn.com/ReggieWilliamsExhibit Reggie Williams], Reggie/CIS successfully centralized client registration data for [http://dir.yahoo.com/Regional/U_S__States/California/Metropolitan_Areas/San_Francisco_Bay_Area/Health/AIDS_HIV/Organizations/ AIDS service organizations in San Francisco], substantially easing the registration process for people living with HIV or AIDS who chose to share their registration data with other Reggie organizations when vising previously-unvisited AIDS service organizations. This meant that documents such as the letter of HIV diagnosis and [http://en.wikipedia.org/wiki/CD4 CD4] count information were entered into the system by one organization and then immediately available to all other AIDS service organizations that the client registered with. Before Reggie/CIS, clients would need to present their paperwork at every AIDS service organization that they visit when initially registering, and San Francisco is notorious for having many small, specialized AIDS service organizations for various needs such as medical care, housing subsidies, food, legal advice, disability benefits counseling, mental health, and medication adherence assistance. Reggie/CIS put each client in control of their data, permitting clients to share or unshare their data with other Reggie organizations at any time. For the DPH, the centralized data in Reggie substantially eased reporting requirements for the federal, state, and county governments. The data was actively kept unduplicated for reporting purposes while respecting each client's data sharing preferences, enabling duplication of data at the agency level while keeping clients unduplicated in reports for accurate reporting. The San Francisco AIDS Foundation and two other collaborating partners used the "CIS" part of the Reggie/CIS system, which built upon the Reggie application and database to provide customized data applications suited for the collaboration's needs. This included data entry screens and reports for rental subsidies, volunteers, care plans, progress notes, and other needs. I was the active maintainer, administrator, and software engineer of the CIS extension from 2001 to 2005, though my colleague at the DPH and I often worked on each other's part of the system when implementing new functionality. ==Architecture== Reggie/CIS consisted of two main systems -- data entry and reporting. The data entry system was a [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing] [http://en.wikipedia.org/wiki/Fat_client fat client] that connected with the middle-tier [http://en.wikipedia.org/wiki/Business_logic business logic] server using the [http://en.wikipedia.org/wiki/Corba common object request broker architecture] (CORBA). The middle tier connected to a [http://en.wikipedia.org/wiki/Microsoft_SQL_Server Microsoft SQL Server] database using a third party JDBC driver (Microsoft did not offer a free JDBC driver during most of Reggie/CIS's lifetime). The database consisted of approximately 100 tables, a moderate number of stored procedures, and one-way replication to two reporting database servers. Reggie/CIS's reporting system was originally written in [http://en.wikipedia.org/wiki/Vbscript Microsoft Visual Basic Script] (VBScript) and published to a closed network using [http://en.wikipedia.org/wiki/Active_Server_Pages Microsoft classic Active Server Pages] (ASP). ===Data entry system deployment view=== A CIS-centric deployment view of the system is depicted in the following diagram: [[Image:ReggieCISServers.png]] ===Reporting system deployment view=== The reporting system also followed a three-tiered pattern: [[Image:Reporting.png]] ===Data flow view of the data entry system's login process=== The data entry client ran as a Java applet and, later, as a Java WebStart application. Installation of the applet was made easy with a web-based multi-stage JavaScript-based installer, though its ease of use was achieved with a rather complex implementation. When the applet starts up, it obtains a reference to a business server object that it uses for object manipulation when the user logs in. This is depicted in the following diagram: [[Image:Client.png]] 54098b20e578e577e4b45c34253c0a0525871169 1570 1569 2007-09-24T16:18:43Z Stevenlawrance 1 /* Motivations */ wikitext text/x-wiki [[Image:Applet-login.png|right]] Reggie/CIS was a large 200-user multi-tenant three-tiered system that was used by all [http://hab.hrsa.gov/ Ryan White CARE]-funded [http://en.wikipedia.org/wiki/Aids AIDS] service organizations in [http://en.wikipedia.org/wiki/San_francisco San Francisco, California] in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] (DPH) [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years. At its peak, this system was used by more than 100 organizations. It was eventually replaced with a third-party solution as a result of reduced commitment and institutional knowledge for Reggie at the DPH. ==Motivations== Named after its champion, [http://groups.msn.com/ReggieWilliamsExhibit Reggie Williams], Reggie/CIS successfully centralized client registration data for [http://dir.yahoo.com/Regional/U_S__States/California/Metropolitan_Areas/San_Francisco_Bay_Area/Health/AIDS_HIV/Organizations/ AIDS service organizations in San Francisco], substantially easing the registration process for people living with HIV or AIDS who chose to share their registration data with other Reggie organizations when vising previously-unvisited AIDS service organizations. This meant that documents such as the letter of HIV diagnosis and [http://en.wikipedia.org/wiki/CD4 CD4] count information were entered into the system by one organization and then immediately available to all other AIDS service organizations that the client registered with. Before Reggie/CIS, clients would need to present their paperwork at every AIDS service organization that they visit when initially registering, and San Francisco is notorious for having many small, specialized AIDS service organizations for various needs such as medical care, housing subsidies, food, legal advice, disability benefits counseling, mental health, and medication adherence assistance. Reggie/CIS put each client in control of their data, permitting clients to share or unshare their data with other Reggie organizations at any time. For the DPH, the centralized data in Reggie substantially eased reporting requirements for the federal, state, and county governments. The data was actively kept unduplicated for reporting purposes while respecting each client's data sharing preferences, enabling duplication of data at the agency level while keeping clients unduplicated in reports for accurate reporting. The San Francisco AIDS Foundation and two other collaborating partners used the "CIS" part of the Reggie/CIS system, which built upon the Reggie application and database to provide customized data applications suited for the collaboration's needs. This included data entry screens and reports for rental subsidies, volunteers, care plans, progress notes, and other needs. I was the active maintainer, administrator, and software engineer of the CIS extension from 2001 to 2005, though my colleague at the DPH and I often worked on each other's part of the system when implementing new functionality. Reggie/CIS was originally implemented by a software consulting firm in 1997. It's architecture remained largely the same throughout its lifetime, though substantial improvements were made while I was one of its two to three maintainers from 2000 to 2005. It originally used Java's limited [http://en.wikipedia.org/wiki/Abstract_Windowing_Toolkit abstract windowing toolkit] (AWT) and a proprietary widget set made by a by-2000 defunct company, and my first enhancement to the system was to convert it to [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing] in the days before fancy [http://en.wikipedia.org/wiki/Refactoring refactoring] tools were readily available. Other enhancements that I added or substantially contributed to included major new features, solid stability, increased manageability, easy installation and uninstallation, portability to non-Windows operating systems, and automatic upgrades. Reggie/CIS started out as a full application started with batch files, and automatic upgrades were achieved by converting that into a [http://en.wikipedia.org/wiki/Java_applet Java applet]. ==Architecture== Reggie/CIS consisted of two main systems -- data entry and reporting. The data entry system was a [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing] [http://en.wikipedia.org/wiki/Fat_client fat client] that connected with the middle-tier [http://en.wikipedia.org/wiki/Business_logic business logic] server using the [http://en.wikipedia.org/wiki/Corba common object request broker architecture] (CORBA). The middle tier connected to a [http://en.wikipedia.org/wiki/Microsoft_SQL_Server Microsoft SQL Server] database using a third party JDBC driver (Microsoft did not offer a free JDBC driver during most of Reggie/CIS's lifetime). The database consisted of approximately 100 tables, a moderate number of stored procedures, and one-way replication to two reporting database servers. Reggie/CIS's reporting system was originally written in [http://en.wikipedia.org/wiki/Vbscript Microsoft Visual Basic Script] (VBScript) and published to a closed network using [http://en.wikipedia.org/wiki/Active_Server_Pages Microsoft classic Active Server Pages] (ASP). ===Data entry system deployment view=== A CIS-centric deployment view of the system is depicted in the following diagram: [[Image:ReggieCISServers.png]] ===Reporting system deployment view=== The reporting system also followed a three-tiered pattern: [[Image:Reporting.png]] ===Data flow view of the data entry system's login process=== The data entry client ran as a Java applet and, later, as a Java WebStart application. Installation of the applet was made easy with a web-based multi-stage JavaScript-based installer, though its ease of use was achieved with a rather complex implementation. When the applet starts up, it obtains a reference to a business server object that it uses for object manipulation when the user logs in. This is depicted in the following diagram: [[Image:Client.png]] a5a8c05f189bf61ef20430c509736e08159e48d3 1571 1570 2007-09-24T16:19:37Z Stevenlawrance 1 /* Data flow view of the data entry system's login process */ wikitext text/x-wiki [[Image:Applet-login.png|right]] Reggie/CIS was a large 200-user multi-tenant three-tiered system that was used by all [http://hab.hrsa.gov/ Ryan White CARE]-funded [http://en.wikipedia.org/wiki/Aids AIDS] service organizations in [http://en.wikipedia.org/wiki/San_francisco San Francisco, California] in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] (DPH) [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years. At its peak, this system was used by more than 100 organizations. It was eventually replaced with a third-party solution as a result of reduced commitment and institutional knowledge for Reggie at the DPH. ==Motivations== Named after its champion, [http://groups.msn.com/ReggieWilliamsExhibit Reggie Williams], Reggie/CIS successfully centralized client registration data for [http://dir.yahoo.com/Regional/U_S__States/California/Metropolitan_Areas/San_Francisco_Bay_Area/Health/AIDS_HIV/Organizations/ AIDS service organizations in San Francisco], substantially easing the registration process for people living with HIV or AIDS who chose to share their registration data with other Reggie organizations when vising previously-unvisited AIDS service organizations. This meant that documents such as the letter of HIV diagnosis and [http://en.wikipedia.org/wiki/CD4 CD4] count information were entered into the system by one organization and then immediately available to all other AIDS service organizations that the client registered with. Before Reggie/CIS, clients would need to present their paperwork at every AIDS service organization that they visit when initially registering, and San Francisco is notorious for having many small, specialized AIDS service organizations for various needs such as medical care, housing subsidies, food, legal advice, disability benefits counseling, mental health, and medication adherence assistance. Reggie/CIS put each client in control of their data, permitting clients to share or unshare their data with other Reggie organizations at any time. For the DPH, the centralized data in Reggie substantially eased reporting requirements for the federal, state, and county governments. The data was actively kept unduplicated for reporting purposes while respecting each client's data sharing preferences, enabling duplication of data at the agency level while keeping clients unduplicated in reports for accurate reporting. The San Francisco AIDS Foundation and two other collaborating partners used the "CIS" part of the Reggie/CIS system, which built upon the Reggie application and database to provide customized data applications suited for the collaboration's needs. This included data entry screens and reports for rental subsidies, volunteers, care plans, progress notes, and other needs. I was the active maintainer, administrator, and software engineer of the CIS extension from 2001 to 2005, though my colleague at the DPH and I often worked on each other's part of the system when implementing new functionality. Reggie/CIS was originally implemented by a software consulting firm in 1997. It's architecture remained largely the same throughout its lifetime, though substantial improvements were made while I was one of its two to three maintainers from 2000 to 2005. It originally used Java's limited [http://en.wikipedia.org/wiki/Abstract_Windowing_Toolkit abstract windowing toolkit] (AWT) and a proprietary widget set made by a by-2000 defunct company, and my first enhancement to the system was to convert it to [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing] in the days before fancy [http://en.wikipedia.org/wiki/Refactoring refactoring] tools were readily available. Other enhancements that I added or substantially contributed to included major new features, solid stability, increased manageability, easy installation and uninstallation, portability to non-Windows operating systems, and automatic upgrades. Reggie/CIS started out as a full application started with batch files, and automatic upgrades were achieved by converting that into a [http://en.wikipedia.org/wiki/Java_applet Java applet]. ==Architecture== Reggie/CIS consisted of two main systems -- data entry and reporting. The data entry system was a [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing] [http://en.wikipedia.org/wiki/Fat_client fat client] that connected with the middle-tier [http://en.wikipedia.org/wiki/Business_logic business logic] server using the [http://en.wikipedia.org/wiki/Corba common object request broker architecture] (CORBA). The middle tier connected to a [http://en.wikipedia.org/wiki/Microsoft_SQL_Server Microsoft SQL Server] database using a third party JDBC driver (Microsoft did not offer a free JDBC driver during most of Reggie/CIS's lifetime). The database consisted of approximately 100 tables, a moderate number of stored procedures, and one-way replication to two reporting database servers. Reggie/CIS's reporting system was originally written in [http://en.wikipedia.org/wiki/Vbscript Microsoft Visual Basic Script] (VBScript) and published to a closed network using [http://en.wikipedia.org/wiki/Active_Server_Pages Microsoft classic Active Server Pages] (ASP). ===Data entry system deployment view=== A CIS-centric deployment view of the system is depicted in the following diagram: [[Image:ReggieCISServers.png]] ===Reporting system deployment view=== The reporting system also followed a three-tiered pattern: [[Image:Reporting.png]] ===Data flow view of the data entry system's login process=== The data entry client ran as a [http://en.wikipedia.org/wiki/Java_applet Java applet] and, after I left to get a master's degree at Carnegie Mellon University (CMU), as a [http://en.wikipedia.org/wiki/Webstart Java WebStart] application. Installation of the applet was made easy with a web-based multi-stage JavaScript-based installer, though its ease of use was achieved with a rather complex implementation. When the applet starts up, it obtains a reference to a business server object that it uses for object manipulation when the user logs in. This is depicted in the following diagram: [[Image:Client.png]] 7eb17827d659119599511935f84e0c216f10df67 1572 1571 2007-09-24T16:20:20Z Stevenlawrance 1 /* Motivations */ wikitext text/x-wiki [[Image:Applet-login.png|right]] Reggie/CIS was a large 200-user multi-tenant three-tiered system that was used by all [http://hab.hrsa.gov/ Ryan White CARE]-funded [http://en.wikipedia.org/wiki/Aids AIDS] service organizations in [http://en.wikipedia.org/wiki/San_francisco San Francisco, California] in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] (DPH) [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years. At its peak, this system was used by more than 100 organizations. It was eventually replaced with a third-party solution as a result of reduced commitment and institutional knowledge for Reggie at the DPH. ==Motivations== Named after its champion, [http://groups.msn.com/ReggieWilliamsExhibit Reggie Williams], Reggie/CIS successfully centralized client registration data for [http://dir.yahoo.com/Regional/U_S__States/California/Metropolitan_Areas/San_Francisco_Bay_Area/Health/AIDS_HIV/Organizations/ AIDS service organizations in San Francisco], substantially easing the registration process for people living with HIV or AIDS who chose to share their registration data with other Reggie organizations when vising previously-unvisited AIDS service organizations. This meant that documents such as the letter of HIV diagnosis and [http://en.wikipedia.org/wiki/CD4 CD4] count information were entered into the system by one organization and then immediately available to all other AIDS service organizations that the client registered with. Before Reggie/CIS, clients would need to present their paperwork at every AIDS service organization that they visit when initially registering, and San Francisco is notorious for having many small, specialized AIDS service organizations for various needs such as medical care, housing subsidies, food, legal advice, disability benefits counseling, mental health, and medication adherence assistance. Reggie/CIS put each client in control of their data, permitting clients to share or unshare their data with other Reggie organizations at any time. For the DPH, the centralized data in Reggie substantially eased reporting requirements for the federal, state, and county governments. The data was actively kept unduplicated for reporting purposes while respecting each client's data sharing preferences, enabling duplication of data at the agency level while keeping clients unduplicated in reports for accurate reporting. The San Francisco AIDS Foundation and two other collaborating partners used the "CIS" part of the Reggie/CIS system, which built upon the Reggie application and database to provide customized data applications suited for the collaboration's needs. This included data entry screens and reports for rental subsidies, volunteers, care plans, progress notes, and other needs. I was the active maintainer, administrator, and software engineer of the CIS extension from 2001 to 2005, though my colleague at the DPH and I often worked on each other's part of the system when implementing new functionality. Reggie/CIS was originally implemented by a software consulting firm in 1997. It's architecture remained largely the same throughout its lifetime, though substantial improvements were made while I was one of its two to three maintainers from 2000 to 2005. It originally used Java's limited [http://en.wikipedia.org/wiki/Abstract_Windowing_Toolkit abstract windowing toolkit] (AWT) and a proprietary widget set made by a by-2000 defunct company, and my first enhancement to the system was to convert it to [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing] in the days before fancy [http://en.wikipedia.org/wiki/Refactoring refactoring] tools were readily available. Other enhancements that I added or substantially contributed to included major new features, solid stability and fault tolerance, increased manageability, easy installation and uninstallation, portability to non-Windows operating systems, and automatic upgrades. Reggie/CIS started out as a full application started with batch files, and automatic upgrades were achieved by converting that into a [http://en.wikipedia.org/wiki/Java_applet Java applet]. ==Architecture== Reggie/CIS consisted of two main systems -- data entry and reporting. The data entry system was a [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing] [http://en.wikipedia.org/wiki/Fat_client fat client] that connected with the middle-tier [http://en.wikipedia.org/wiki/Business_logic business logic] server using the [http://en.wikipedia.org/wiki/Corba common object request broker architecture] (CORBA). The middle tier connected to a [http://en.wikipedia.org/wiki/Microsoft_SQL_Server Microsoft SQL Server] database using a third party JDBC driver (Microsoft did not offer a free JDBC driver during most of Reggie/CIS's lifetime). The database consisted of approximately 100 tables, a moderate number of stored procedures, and one-way replication to two reporting database servers. Reggie/CIS's reporting system was originally written in [http://en.wikipedia.org/wiki/Vbscript Microsoft Visual Basic Script] (VBScript) and published to a closed network using [http://en.wikipedia.org/wiki/Active_Server_Pages Microsoft classic Active Server Pages] (ASP). ===Data entry system deployment view=== A CIS-centric deployment view of the system is depicted in the following diagram: [[Image:ReggieCISServers.png]] ===Reporting system deployment view=== The reporting system also followed a three-tiered pattern: [[Image:Reporting.png]] ===Data flow view of the data entry system's login process=== The data entry client ran as a [http://en.wikipedia.org/wiki/Java_applet Java applet] and, after I left to get a master's degree at Carnegie Mellon University (CMU), as a [http://en.wikipedia.org/wiki/Webstart Java WebStart] application. Installation of the applet was made easy with a web-based multi-stage JavaScript-based installer, though its ease of use was achieved with a rather complex implementation. When the applet starts up, it obtains a reference to a business server object that it uses for object manipulation when the user logs in. This is depicted in the following diagram: [[Image:Client.png]] e724d287bfcd0c86b28faea50156306097d4f5a5 1574 1572 2007-09-24T16:25:06Z Stevenlawrance 1 /* Architecture */ wikitext text/x-wiki [[Image:Applet-login.png|right]] Reggie/CIS was a large 200-user multi-tenant three-tiered system that was used by all [http://hab.hrsa.gov/ Ryan White CARE]-funded [http://en.wikipedia.org/wiki/Aids AIDS] service organizations in [http://en.wikipedia.org/wiki/San_francisco San Francisco, California] in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] (DPH) [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years. At its peak, this system was used by more than 100 organizations. It was eventually replaced with a third-party solution as a result of reduced commitment and institutional knowledge for Reggie at the DPH. ==Motivations== Named after its champion, [http://groups.msn.com/ReggieWilliamsExhibit Reggie Williams], Reggie/CIS successfully centralized client registration data for [http://dir.yahoo.com/Regional/U_S__States/California/Metropolitan_Areas/San_Francisco_Bay_Area/Health/AIDS_HIV/Organizations/ AIDS service organizations in San Francisco], substantially easing the registration process for people living with HIV or AIDS who chose to share their registration data with other Reggie organizations when vising previously-unvisited AIDS service organizations. This meant that documents such as the letter of HIV diagnosis and [http://en.wikipedia.org/wiki/CD4 CD4] count information were entered into the system by one organization and then immediately available to all other AIDS service organizations that the client registered with. Before Reggie/CIS, clients would need to present their paperwork at every AIDS service organization that they visit when initially registering, and San Francisco is notorious for having many small, specialized AIDS service organizations for various needs such as medical care, housing subsidies, food, legal advice, disability benefits counseling, mental health, and medication adherence assistance. Reggie/CIS put each client in control of their data, permitting clients to share or unshare their data with other Reggie organizations at any time. For the DPH, the centralized data in Reggie substantially eased reporting requirements for the federal, state, and county governments. The data was actively kept unduplicated for reporting purposes while respecting each client's data sharing preferences, enabling duplication of data at the agency level while keeping clients unduplicated in reports for accurate reporting. The San Francisco AIDS Foundation and two other collaborating partners used the "CIS" part of the Reggie/CIS system, which built upon the Reggie application and database to provide customized data applications suited for the collaboration's needs. This included data entry screens and reports for rental subsidies, volunteers, care plans, progress notes, and other needs. I was the active maintainer, administrator, and software engineer of the CIS extension from 2001 to 2005, though my colleague at the DPH and I often worked on each other's part of the system when implementing new functionality. Reggie/CIS was originally implemented by a software consulting firm in 1997. It's architecture remained largely the same throughout its lifetime, though substantial improvements were made while I was one of its two to three maintainers from 2000 to 2005. It originally used Java's limited [http://en.wikipedia.org/wiki/Abstract_Windowing_Toolkit abstract windowing toolkit] (AWT) and a proprietary widget set made by a by-2000 defunct company, and my first enhancement to the system was to convert it to [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing] in the days before fancy [http://en.wikipedia.org/wiki/Refactoring refactoring] tools were readily available. Other enhancements that I added or substantially contributed to included major new features, solid stability and fault tolerance, increased manageability, easy installation and uninstallation, portability to non-Windows operating systems, and automatic upgrades. Reggie/CIS started out as a full application started with batch files, and automatic upgrades were achieved by converting that into a [http://en.wikipedia.org/wiki/Java_applet Java applet]. ==Architecture== Reggie/CIS consisted of two main systems -- data entry and reporting. The data entry system was a [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing] [http://en.wikipedia.org/wiki/Fat_client fat client] that connected with the middle-tier [http://en.wikipedia.org/wiki/Business_logic business logic] server using the [http://en.wikipedia.org/wiki/Corba common object request broker architecture] (CORBA). The middle tier connected to a [http://en.wikipedia.org/wiki/Microsoft_SQL_Server Microsoft SQL Server] database using a third party JDBC driver (Microsoft did not offer a free JDBC driver during most of Reggie/CIS's lifetime). The database consisted of approximately 100 tables, a moderate number of stored procedures, and one-way replication to two reporting database servers. Reggie/CIS's reporting system was originally written in [http://en.wikipedia.org/wiki/Vbscript Microsoft Visual Basic Script] (VBScript) and published to a closed network using [http://en.wikipedia.org/wiki/Active_Server_Pages Microsoft classic Active Server Pages] (ASP). Reports and data were made available as appropriate for the user's role and their organization, effectively hiding data that they did not have access to in the data entry application. [[PDF Access Reports|PDF reports]] were achieved with Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, enabling web-based PDF reports within the reporting system through the web browser. ===Data entry system deployment view=== A CIS-centric deployment view of the system is depicted in the following diagram: [[Image:ReggieCISServers.png]] ===Reporting system deployment view=== The reporting system also followed a three-tiered pattern: [[Image:Reporting.png]] ===Data flow view of the data entry system's login process=== The data entry client ran as a [http://en.wikipedia.org/wiki/Java_applet Java applet] and, after I left to get a master's degree at Carnegie Mellon University (CMU), as a [http://en.wikipedia.org/wiki/Webstart Java WebStart] application. Installation of the applet was made easy with a web-based multi-stage JavaScript-based installer, though its ease of use was achieved with a rather complex implementation. When the applet starts up, it obtains a reference to a business server object that it uses for object manipulation when the user logs in. This is depicted in the following diagram: [[Image:Client.png]] 96da57c8f206e8d6a27350d54f604674cec48dee Main Page 0 1404 1578 1534 2007-09-29T20:32:05Z Stevenlawrance 1 wikitext text/x-wiki Welcome to Moonlight Design -- the personal web site of [[Henry Lamb]] and [[Steven Lawrance]] ==Henry Lamb== [[Henry Lamb]] is a professional restaurateur trained in both restaurant management and culinary arts. ==Steven Lawrance== [[Steven Lawrance]] is an active practitioner of [http://en.wikipedia.org/wiki/Software_engineering software engineering] and open-source software enthusiast [[Steven Lawrance#Software Project Experience|Check out the list of software that Steve has either written or contributed to]] ==Site Tag Cloud== <font size="5">[https://www.moonlightdesign.org/urllock/ IE URL Lock]</font> <font size="5">[https://www.moonlightdesign.org/thunderforce/ Thunderforce]</font> <font size="3">[https://www.moonlightdesign.org/dirlist DirList]</font> <font size="2">[[Serendipity|Team Serendipity Master of Software Engineering (MSE) studio project]]</font> <font size="1">[[Personal financial process]]</font> 9b24c158fead56d5282f51922273968966d05006 1579 1578 2007-09-29T20:33:30Z Stevenlawrance 1 /* Site Tag Cloud */ wikitext text/x-wiki Welcome to Moonlight Design -- the personal web site of [[Henry Lamb]] and [[Steven Lawrance]] ==Henry Lamb== [[Henry Lamb]] is a professional restaurateur trained in both restaurant management and culinary arts. ==Steven Lawrance== [[Steven Lawrance]] is an active practitioner of [http://en.wikipedia.org/wiki/Software_engineering software engineering] and open-source software enthusiast [[Steven Lawrance#Software Project Experience|Check out the list of software that Steve has either written or contributed to]] ==Site Tag Cloud== <font size="5">[https://www.moonlightdesign.org/urllock/ IE URL Lock]</font> <font size="5">[http://gnucashtoqif.sourceforge.net/ GnuCashToQIF]</font> <font size="5">[https://www.moonlightdesign.org/thunderforce/ Thunderforce]</font> <font size="3">[https://www.moonlightdesign.org/dirlist DirList]</font> <font size="2">[[Serendipity|Team Serendipity Master of Software Engineering (MSE) studio project]]</font> <font size="1">[[Personal financial process]]</font> 27b80bf5eb6cf974e0fd5dacb2b41eeba1200a4e 1580 1579 2007-09-29T20:33:45Z Stevenlawrance 1 /* Henry Lamb */ wikitext text/x-wiki Welcome to Moonlight Design -- the personal web site of [[Henry Lamb]] and [[Steven Lawrance]] ==Henry Lamb== [[Henry Lamb]] is a professional restaurateur trained in both restaurant management and culinary arts ==Steven Lawrance== [[Steven Lawrance]] is an active practitioner of [http://en.wikipedia.org/wiki/Software_engineering software engineering] and open-source software enthusiast [[Steven Lawrance#Software Project Experience|Check out the list of software that Steve has either written or contributed to]] ==Site Tag Cloud== <font size="5">[https://www.moonlightdesign.org/urllock/ IE URL Lock]</font> <font size="5">[http://gnucashtoqif.sourceforge.net/ GnuCashToQIF]</font> <font size="5">[https://www.moonlightdesign.org/thunderforce/ Thunderforce]</font> <font size="3">[https://www.moonlightdesign.org/dirlist DirList]</font> <font size="2">[[Serendipity|Team Serendipity Master of Software Engineering (MSE) studio project]]</font> <font size="1">[[Personal financial process]]</font> 926774f6f496f89d6f120d7f3454940df1a95d51 1581 1580 2007-09-29T20:40:07Z Stevenlawrance 1 wikitext text/x-wiki Welcome to Moonlight Design -- the personal web site of [[Henry Lamb]] and [[Steven Lawrance]] ==Henry Lamb== [[Henry Lamb]] is a professional [http://en.wikipedia.org/wiki/Restaurant restaurateur] trained in both restaurant management and culinary arts ==Steven Lawrance== [[Steven Lawrance]] is an active practitioner of [http://en.wikipedia.org/wiki/Software_engineering software engineering] and open-source software enthusiast [[Steven Lawrance#Software Project Experience|Check out the list of software that Steve has either written or contributed to]] ==Site Tag Cloud== <font size="5">[https://www.moonlightdesign.org/urllock/ IE URL Lock]</font> <font size="5">[http://gnucashtoqif.sourceforge.net/ GnuCashToQIF]</font> <font size="5">[https://www.moonlightdesign.org/thunderforce/ Thunderforce]</font> <font size="3">[https://www.moonlightdesign.org/dirlist DirList]</font> <font size="2">[[Serendipity|Team Serendipity Master of Software Engineering (MSE) studio project]]</font> <font size="1">[[Personal financial process]]</font> 1bf41c666277ab069329e92ad3222f6a5e532af2 1582 1581 2007-09-29T20:41:02Z Stevenlawrance 1 /* Steven Lawrance */ wikitext text/x-wiki Welcome to Moonlight Design -- the personal web site of [[Henry Lamb]] and [[Steven Lawrance]] ==Henry Lamb== [[Henry Lamb]] is a professional [http://en.wikipedia.org/wiki/Restaurant restaurateur] trained in both restaurant management and culinary arts ==Steven Lawrance== [[Steven Lawrance]] is an active practitioner of [http://en.wikipedia.org/wiki/Software_engineering software engineering] and open-source software enthusiast trained in software engineering and business administration [[Steven Lawrance#Software Project Experience|Check out the list of software that Steve has either written or contributed to]] ==Site Tag Cloud== <font size="5">[https://www.moonlightdesign.org/urllock/ IE URL Lock]</font> <font size="5">[http://gnucashtoqif.sourceforge.net/ GnuCashToQIF]</font> <font size="5">[https://www.moonlightdesign.org/thunderforce/ Thunderforce]</font> <font size="3">[https://www.moonlightdesign.org/dirlist DirList]</font> <font size="2">[[Serendipity|Team Serendipity Master of Software Engineering (MSE) studio project]]</font> <font size="1">[[Personal financial process]]</font> 85dbd69029797b1479c45da9ec08e65e33118f7e 1583 1582 2007-09-29T20:47:46Z Stevenlawrance 1 wikitext text/x-wiki Welcome to Moonlight Design -- the personal web site of [[Henry Lamb]] and [[Steven Lawrance]] ==Henry Lamb== [[Henry Lamb]] is a professional [http://en.wikipedia.org/wiki/Restaurant restaurateur] trained in both [http://www.baychef.com/programs/hospitality_and_restaurant.asp restaurant management] and [http://www.baychef.com/programs/culinary_arts.asp culinary arts] ==Steven Lawrance== [[Steven Lawrance]] is an active practitioner of [http://en.wikipedia.org/wiki/Software_engineering software engineering] and [http://en.wikipedia.org/wiki/Open-source_software open-source software enthusiast] trained in [http://www.mse.cs.cmu.edu/ software engineering], [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems computer information systems], and [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ business administration] [[Steven Lawrance#Software Project Experience|Check out the list of software that Steve has either written or contributed to]] ==Site Tag Cloud== <font size="5">[https://www.moonlightdesign.org/urllock/ IE URL Lock]</font> <font size="5">[http://gnucashtoqif.sourceforge.net/ GnuCashToQIF]</font> <font size="5">[https://www.moonlightdesign.org/thunderforce/ Thunderforce]</font> <font size="3">[https://www.moonlightdesign.org/dirlist DirList]</font> <font size="2">[[Serendipity|Team Serendipity Master of Software Engineering (MSE) studio project]]</font> <font size="1">[[Personal financial process]]</font> 92879aa33630ba92bf242b5c6e94a6d5ebba7b70 1584 1583 2007-09-29T21:02:50Z Stevenlawrance 1 wikitext text/x-wiki {| |valign="top"| Welcome to Moonlight Design -- the personal web site of [[Henry Lamb]] and [[Steven Lawrance]] ==Henry Lamb== [[Henry Lamb]] is a professional [http://en.wikipedia.org/wiki/Restaurant restaurateur] trained in both [http://www.baychef.com/programs/hospitality_and_restaurant.asp restaurant management] and [http://www.baychef.com/programs/culinary_arts.asp culinary arts] ==Steven Lawrance== [[Steven Lawrance]] is an active practitioner of [http://en.wikipedia.org/wiki/Software_engineering software engineering] and [http://en.wikipedia.org/wiki/Open-source_software open-source software enthusiast] trained in [http://www.mse.cs.cmu.edu/ software engineering], [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems computer information systems], and [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ business administration] [[Steven Lawrance#Software Project Experience|Check out the list of software that Steve has either written or contributed to]] |valign="top" width="25%"| {|border="1" | <font size="5">[https://www.moonlightdesign.org/urllock/ IE URL Lock]</font> <font size="5">[http://gnucashtoqif.sourceforge.net/ GnuCashToQIF]</font> <font size="5">[https://www.moonlightdesign.org/thunderforce/ Thunderforce]</font> <font size="3">[https://www.moonlightdesign.org/dirlist DirList]</font> <font size="2">[[Serendipity|Team Serendipity Master of Software Engineering (MSE) studio project]]</font> <font size="1">[[Personal financial process]]</font> |} |} 7127179b478118b7ae8b1f23c8c1c65d58266a31 MediaWiki:Common.css 8 1418 1599 1501 2007-09-29T22:40:24Z Stevenlawrance 1 css text/css /** CSS placed here will be applied to all skins */ table.software { border-width: 1px 1px 1px 1px; border-spacing: 0px; border-style: outset outset outset outset; border-color: black black black black; border-collapse: separate; background-color: white; } table.software td:first-child { vertical-align: top; padding-right: 1em; border-width: 0px 1px 0px 0px; border-style: inset inset inset inset; border-color: gray black gray gray; } table.software td:not(first-child) { vertical-align: top; } table.software th { vertical-align: top; padding-right: 1em; border-width: 0px 1px 0px 0px; border-style: inset inset inset inset; border-color: gray black gray gray; background-color: #eaeaea; } tr.grayrow { background-color: #eaeaea; } a79cfd7287e52e04bd2a05e5395bc4e907a04d26 1600 1599 2007-09-29T22:41:53Z Stevenlawrance 1 css text/css /** CSS placed here will be applied to all skins */ table.software { border-width: 1px 1px 1px 1px; border-spacing: 0px; border-style: outset outset outset outset; border-color: black black black black; border-collapse: separate; background-color: white; } table.software td:first-child { vertical-align: top; padding-right: 1em; border-width: 0px 1px 0px 0px; border-style: inset inset inset inset; border-color: gray black gray gray; } table.software td:not(first-child) { vertical-align: top; } table.software th { vertical-align: top; padding-right: 1em; border-width: 0px 1px 0px 0px; border-style: inset inset inset inset; border-color: gray black gray gray; } tr.grayrow { background-color: #eaeaea; } 8f265eb3fe1973e752062d265b9f3161be27f26e 1601 1600 2007-09-29T22:44:22Z Stevenlawrance 1 css text/css /** CSS placed here will be applied to all skins */ table.software { border-width: 1px 1px 1px 1px; border-spacing: 0px; border-style: outset outset outset outset; border-color: black black black black; border-collapse: separate; background-color: white; } table.software td:last-child { vertical-align: top; } table.software td:not(last-child) { vertical-align: top; padding-right: 1em; border-width: 0px 1px 0px 0px; border-style: inset inset inset inset; border-color: gray black gray gray; } table.software th { vertical-align: top; padding-right: 1em; border-width: 0px 1px 0px 0px; border-style: inset inset inset inset; border-color: gray black gray gray; } tr.grayrow { background-color: #eaeaea; } f848ab5e3cfd84e351e014b70d65882940d9fbf5 1602 1601 2007-09-29T22:44:59Z Stevenlawrance 1 css text/css /** CSS placed here will be applied to all skins */ table.software { border-width: 1px 1px 1px 1px; border-spacing: 0px; border-style: outset outset outset outset; border-color: black black black black; border-collapse: separate; background-color: white; } table.software td:last-child { vertical-align: top; } table.software td:not(last-child) { vertical-align: top; padding-right: 1em; border-width: 0px 1px 0px 0px; border-style: inset inset inset inset; border-color: gray black gray gray; } table.software th { vertical-align: top; padding-right: 1em; border-width: 0px 1px 1px 0px; border-style: inset inset inset inset; border-color: gray black black gray; } tr.grayrow { background-color: #eaeaea; } e9752d4c11877af1e1557c1afab24c080545f871 1603 1602 2007-09-29T22:46:09Z Stevenlawrance 1 css text/css /** CSS placed here will be applied to all skins */ table.software { border-width: 1px 1px 1px 1px; border-spacing: 0px; border-style: outset outset outset outset; border-color: black black black black; border-collapse: separate; background-color: white; } table.software td:last-child { vertical-align: top; width: 15em; } table.software td:not(last-child) { vertical-align: top; padding-right: 1em; border-width: 0px 1px 0px 0px; border-style: inset inset inset inset; border-color: gray black gray gray; } table.software th { vertical-align: top; padding-right: 1em; border-width: 0px 1px 1px 0px; border-style: inset inset inset inset; border-color: gray black black gray; } tr.grayrow { background-color: #eaeaea; } 67414024574b5c009076e45edafe9bd38e471a8e 1604 1603 2007-09-29T22:46:51Z Stevenlawrance 1 css text/css /** CSS placed here will be applied to all skins */ table.software { border-width: 1px 1px 1px 1px; border-spacing: 0px; border-style: outset outset outset outset; border-color: black black black black; border-collapse: separate; background-color: white; } table.software td:first-child { width: 10em; } table.software td:last-child { vertical-align: top; width: 15em; } table.software td:not(last-child) { vertical-align: top; padding-right: 1em; border-width: 0px 1px 0px 0px; border-style: inset inset inset inset; border-color: gray black gray gray; } table.software th { vertical-align: top; padding-right: 1em; border-width: 0px 1px 1px 0px; border-style: inset inset inset inset; border-color: gray black black gray; } tr.grayrow { background-color: #eaeaea; } d83bb771a3248222c26b99b005f5b73976206e58 1605 1604 2007-09-29T22:47:27Z Stevenlawrance 1 css text/css /** CSS placed here will be applied to all skins */ table.software { border-width: 1px 1px 1px 1px; border-spacing: 0px; border-style: outset outset outset outset; border-color: black black black black; border-collapse: separate; background-color: white; } table.software td:first-child { width: 15em; } table.software td:last-child { vertical-align: top; width: 15em; } table.software td:not(last-child) { vertical-align: top; padding-right: 1em; border-width: 0px 1px 0px 0px; border-style: inset inset inset inset; border-color: gray black gray gray; } table.software th { vertical-align: top; padding-right: 1em; border-width: 0px 1px 1px 0px; border-style: inset inset inset inset; border-color: gray black black gray; } tr.grayrow { background-color: #eaeaea; } 6080a965244b4370c4a53e55a154fb4c16f53010 1606 1605 2007-09-29T22:47:48Z Stevenlawrance 1 css text/css /** CSS placed here will be applied to all skins */ table.software { border-width: 1px 1px 1px 1px; border-spacing: 0px; border-style: outset outset outset outset; border-color: black black black black; border-collapse: separate; background-color: white; } table.software td:first-child { width: 8em; } table.software td:last-child { vertical-align: top; width: 15em; } table.software td:not(last-child) { vertical-align: top; padding-right: 1em; border-width: 0px 1px 0px 0px; border-style: inset inset inset inset; border-color: gray black gray gray; } table.software th { vertical-align: top; padding-right: 1em; border-width: 0px 1px 1px 0px; border-style: inset inset inset inset; border-color: gray black black gray; } tr.grayrow { background-color: #eaeaea; } 5b3dd80a40632d27114fa59fe86442180cca7628 MediaWiki:Common.css 8 1418 1607 1606 2007-09-29T22:48:02Z Stevenlawrance 1 css text/css /** CSS placed here will be applied to all skins */ table.software { border-width: 1px 1px 1px 1px; border-spacing: 0px; border-style: outset outset outset outset; border-color: black black black black; border-collapse: separate; background-color: white; } table.software td:first-child { width: 12em; } table.software td:last-child { vertical-align: top; width: 15em; } table.software td:not(last-child) { vertical-align: top; padding-right: 1em; border-width: 0px 1px 0px 0px; border-style: inset inset inset inset; border-color: gray black gray gray; } table.software th { vertical-align: top; padding-right: 1em; border-width: 0px 1px 1px 0px; border-style: inset inset inset inset; border-color: gray black black gray; } tr.grayrow { background-color: #eaeaea; } 2536c5b528bc6532cb0e6b7093a780cdee7e0b4c 1608 1607 2007-09-29T22:48:25Z Stevenlawrance 1 css text/css /** CSS placed here will be applied to all skins */ table.software { border-width: 1px 1px 1px 1px; border-spacing: 0px; border-style: outset outset outset outset; border-color: black black black black; border-collapse: separate; background-color: white; } table.software td:first-child { width: 10em; } table.software td:last-child { vertical-align: top; width: 15em; } table.software td:not(last-child) { vertical-align: top; padding-right: 1em; border-width: 0px 1px 0px 0px; border-style: inset inset inset inset; border-color: gray black gray gray; } table.software th { vertical-align: top; padding-right: 1em; border-width: 0px 1px 1px 0px; border-style: inset inset inset inset; border-color: gray black black gray; } tr.grayrow { background-color: #eaeaea; } d83bb771a3248222c26b99b005f5b73976206e58 1624 1608 2007-09-29T23:53:44Z Stevenlawrance 1 css text/css /** CSS placed here will be applied to all skins */ table.software { border-width: 1px 1px 1px 1px; border-spacing: 0px; border-style: outset outset outset outset; border-color: black black black black; border-collapse: separate; background-color: white; } table.software td:first-child { width: 10em; } table.software td:last-child { vertical-align: top; } table.software td:not(last-child) { vertical-align: top; padding-right: 1em; border-width: 0px 1px 0px 0px; border-style: inset inset inset inset; border-color: gray black gray gray; } table.software th { vertical-align: top; padding-right: 1em; border-width: 0px 1px 1px 0px; border-style: inset inset inset inset; border-color: gray black black gray; } tr.grayrow { background-color: #eaeaea; } 5ebf9278c4077fb052088eedbfaaed9c9db9f0b4 1631 1624 2007-09-30T00:02:31Z Stevenlawrance 1 css text/css /** CSS placed here will be applied to all skins */ table.software { border-width: 1px 1px 1px 1px; border-spacing: 0px; border-style: outset outset outset outset; border-color: black black black black; border-collapse: separate; background-color: white; } table.software td:first-child { width: 10em; } table.software td:last-child { vertical-align: top; width: 5em; } table.software td:not(last-child) { vertical-align: top; padding-right: 1em; border-width: 0px 1px 0px 0px; border-style: inset inset inset inset; border-color: gray black gray gray; } table.software th { vertical-align: top; padding-right: 1em; border-width: 0px 1px 1px 0px; border-style: inset inset inset inset; border-color: gray black black gray; } tr.grayrow { background-color: #eaeaea; } 69714fdad88253fc49b74ffccee6e6bb7bd5f985 1633 1631 2007-09-30T00:09:19Z Stevenlawrance 1 css text/css /** CSS placed here will be applied to all skins */ table.software { border-width: 1px 1px 1px 1px; border-spacing: 0px; border-style: outset outset outset outset; border-color: black black black black; border-collapse: separate; background-color: white; } table.software td { vertical-align: top; } table.software td:first-child { width: 10em; } table.software td:last-child { width: 5em; } table.software td:not(last-child) { padding-right: 1em; border-width: 0px 1px 0px 0px; border-style: inset inset inset inset; border-color: gray black gray gray; } table.software th { vertical-align: top; padding-right: 1em; border-width: 0px 1px 1px 0px; border-style: inset inset inset inset; border-color: gray black black gray; } tr.grayrow { background-color: #eaeaea; } 812853774338d9de7595500b3f4ec71425c85081 Steven Lawrance 0 1409 1609 1598 2007-09-29T22:50:58Z Stevenlawrance 1 /* Software Project Experience */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software" !Name !Description !Technologies |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://www.eclipse.org/ Eclipse], [http://en.wikipedia.org/wiki/Standard_Widget_Toolkit SWT], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/JNI JNI] |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/JNI JNI], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/IIS IIS], [http://en.wikipedia.org/wiki/Component_object_model COM] |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS] |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/Mysql MySQL] |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/Xpcom XPCOM] |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||[http://en.wikipedia.org/wiki/BASIC_Stamp Parallax BASIC Stamp], [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot] |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/Xpcom XPCOM] |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||[http://en.wikipedia.org/wiki/Php PHP], [http://en.wikipedia.org/wiki/Mysql MySQL], [http://en.wikipedia.org/wiki/Javascript JavaScript] |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software" !Name !Description !Technologies |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com|| |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind|| |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry|| |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| |- |[[Horses]]||A fun horse racing game that I made a long time ago|| |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" !Name !Description !Technologies |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to PHP 3.0.12 and PHP4 Beta2 so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers|| |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions|| |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant|| |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions|| |} <br> ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] d6b303913a413d0e373a3611d97de20569b00b2b 1621 1609 2007-09-29T23:41:28Z Stevenlawrance 1 /* Team software */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://www.eclipse.org/ Eclipse], [http://en.wikipedia.org/wiki/Standard_Widget_Toolkit SWT], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/JNI JNI] |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/JNI JNI], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/IIS IIS], [http://en.wikipedia.org/wiki/Component_object_model COM] |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS] |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/Mysql MySQL] |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/Xpcom XPCOM] |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||[http://en.wikipedia.org/wiki/BASIC_Stamp Parallax BASIC Stamp], [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot] |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/Xpcom XPCOM] |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||[http://en.wikipedia.org/wiki/Php PHP], [http://en.wikipedia.org/wiki/Mysql MySQL], [http://en.wikipedia.org/wiki/Javascript JavaScript] |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software" !Name !Description !Technologies |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com|| |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind|| |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry|| |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| |- |[[Horses]]||A fun horse racing game that I made a long time ago|| |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software" !Name !Description !Technologies |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to PHP 3.0.12 and PHP4 Beta2 so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers|| |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions|| |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant|| |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions|| |} <br> ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 95db74ca520318ecf0e7c104d3cc1ae5386a3832 1622 1621 2007-09-29T23:41:48Z Stevenlawrance 1 /* Software Project Experience */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://www.eclipse.org/ Eclipse], [http://en.wikipedia.org/wiki/Standard_Widget_Toolkit SWT], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/JNI JNI] |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/JNI JNI], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/IIS IIS], [http://en.wikipedia.org/wiki/Component_object_model COM] |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS] |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/Mysql MySQL] |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/Xpcom XPCOM] |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||[http://en.wikipedia.org/wiki/BASIC_Stamp Parallax BASIC Stamp], [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot] |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/Xpcom XPCOM] |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||[http://en.wikipedia.org/wiki/Php PHP], [http://en.wikipedia.org/wiki/Mysql MySQL], [http://en.wikipedia.org/wiki/Javascript JavaScript] |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com|| |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind|| |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry|| |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| |- |[[Horses]]||A fun horse racing game that I made a long time ago|| |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to PHP 3.0.12 and PHP4 Beta2 so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers|| |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions|| |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant|| |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions|| |} <br> ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 1effe922f665f5e365b995748f11060c3cb06591 1632 1622 2007-09-30T00:04:39Z Stevenlawrance 1 /* Software Project Experience */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://www.eclipse.org/ Eclipse], [http://en.wikipedia.org/wiki/Standard_Widget_Toolkit SWT], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/JNI JNI]||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/JNI JNI], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/IIS IIS], [http://en.wikipedia.org/wiki/Component_object_model COM]||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||2004-2005 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/Mysql MySQL]||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||2006 |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||[http://en.wikipedia.org/wiki/BASIC_Stamp Parallax BASIC Stamp], [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||[http://en.wikipedia.org/wiki/Php PHP], [http://en.wikipedia.org/wiki/Mysql MySQL], [http://en.wikipedia.org/wiki/Javascript JavaScript]||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com|| || |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind|| || |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry|| || |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| || |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to PHP 3.0.12 and PHP4 Beta2 so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers|| || |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions|| || |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant|| || |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions|| || |} <br> ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 4d86624fca4ee16d59a55a0264b4d3edb5dc8ba2 1635 1632 2007-09-30T00:16:29Z Stevenlawrance 1 /* Software Project Experience */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code LOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://www.eclipse.org/ Eclipse], [http://en.wikipedia.org/wiki/Standard_Widget_Toolkit SWT], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/JNI JNI]|| ||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/JNI JNI], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/IIS IIS], [http://en.wikipedia.org/wiki/Component_object_model COM]|| ||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]|| ||2004-2005 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/Mysql MySQL]|| ||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/Xpcom XPCOM]|| ||2006 |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||[http://en.wikipedia.org/wiki/BASIC_Stamp Parallax BASIC Stamp], [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]|| ||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/Xpcom XPCOM]|| ||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||[http://en.wikipedia.org/wiki/Php PHP], [http://en.wikipedia.org/wiki/Mysql MySQL], [http://en.wikipedia.org/wiki/Javascript JavaScript]|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code LOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com|| || || |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind|| || || |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry|| || || |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || || |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || || |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code LOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || || |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || || |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| || || |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to PHP 3.0.12 and PHP4 Beta2 so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers|| || || |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions|| || || |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant|| || || |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions|| || || |} <br> ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] be1d8058f29049baed118e463375a0261b609d5c 1641 1635 2007-09-30T01:08:31Z Stevenlawrance 1 /* Team software */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code LOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://www.eclipse.org/ Eclipse], [http://en.wikipedia.org/wiki/Standard_Widget_Toolkit SWT], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/JNI JNI]|| ||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/JNI JNI], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/IIS IIS], [http://en.wikipedia.org/wiki/Component_object_model COM]||275,945||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]|| ||2004-2005 |- |[[SFAF CRM]]||''description''|| || ||2001-2005 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/Mysql MySQL]||1,829||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||1,185||2006 |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||[http://en.wikipedia.org/wiki/BASIC_Stamp Parallax BASIC Stamp], [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/Xpcom XPCOM]|| ||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||[http://en.wikipedia.org/wiki/Php PHP], [http://en.wikipedia.org/wiki/Mysql MySQL], [http://en.wikipedia.org/wiki/Javascript JavaScript]||n/a||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code LOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com|| || || |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind|| || || |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry|| || || |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || || |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || || |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code LOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || || |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || || |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| || || |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to PHP 3.0.12 and PHP4 Beta2 so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers|| || || |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions|| || || |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant|| || || |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions|| || || |} <br> ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] dae5f83228bff35bf94c1324ebd0dc3529668ab6 1642 1641 2007-09-30T01:14:14Z Stevenlawrance 1 /* Software Project Experience */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code LOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://www.eclipse.org/ Eclipse], [http://en.wikipedia.org/wiki/Standard_Widget_Toolkit SWT], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/JNI JNI]|| ||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/JNI JNI], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/IIS IIS], [http://en.wikipedia.org/wiki/Component_object_model COM]||275,945||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]|| ||2004-2005 |- |[[SFAF CRM]]||''description''|| || ||2001-2005 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/Mysql MySQL]||1,829||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||1,185||2006 |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||[http://en.wikipedia.org/wiki/BASIC_Stamp Parallax BASIC Stamp], [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/Xpcom XPCOM]|| ||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||[http://en.wikipedia.org/wiki/Php PHP], [http://en.wikipedia.org/wiki/Mysql MySQL], [http://en.wikipedia.org/wiki/Javascript JavaScript]||n/a||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code LOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com|| || || |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind|| || || |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry|| || || |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || || |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || || |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code LOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || || |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || || |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| || || |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to PHP 3.0.12 and PHP4 Beta2 so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers|| || || |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions|| || || |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant|| || || |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions|| || || |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 | xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code> ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] a20d4afcc5a215130afc12d3e0ed1c42356e369c 1643 1642 2007-09-30T01:35:49Z Stevenlawrance 1 /* Software Project Experience */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code LOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://www.eclipse.org/ Eclipse], [http://en.wikipedia.org/wiki/Standard_Widget_Toolkit SWT], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/JNI JNI]||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/JNI JNI], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/IIS IIS], [http://en.wikipedia.org/wiki/Component_object_model COM]||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]|| ||2004-2005 |- |[[SFAF CRM]]||''description''|| || ||2001-2005 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/Mysql MySQL]||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||[http://en.wikipedia.org/wiki/BASIC_Stamp Parallax BASIC Stamp], [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||[http://en.wikipedia.org/wiki/Php PHP], [http://en.wikipedia.org/wiki/Mysql MySQL], [http://en.wikipedia.org/wiki/Javascript JavaScript]||n/a||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code LOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com|| || || |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind|| || || |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry|| || || |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || || |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || || |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code LOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || || |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || || |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| || || |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to PHP 3.0.12 and PHP4 Beta2 so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers|| || || |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions|| || || |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant|| || || |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions|| || || |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code> ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] fbb31b0f25a49c23caecaca32a2aff7020fe60f4 1645 1643 2007-09-30T02:10:38Z Stevenlawrance 1 /* Software Project Experience */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://www.eclipse.org/ Eclipse], [http://en.wikipedia.org/wiki/Standard_Widget_Toolkit SWT], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/JNI JNI]||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/JNI JNI], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/IIS IIS], [http://en.wikipedia.org/wiki/Component_object_model COM]||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, and implemented strict URL filtering security using an Apache reverse-proxy and mod_rewrite||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||97,592||2004-2005 |- |[[SFAF CRM]]||''description''|| ||69,015||2001-2005 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/Mysql MySQL]||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||[http://en.wikipedia.org/wiki/BASIC_Stamp Parallax BASIC Stamp], [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||[http://en.wikipedia.org/wiki/Php PHP], [http://en.wikipedia.org/wiki/Mysql MySQL], [http://en.wikipedia.org/wiki/Javascript JavaScript]|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com|| {{smn}}|| || |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind|| || || |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry|| || || |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || || |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || || |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || {{smn}}|| |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || || |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| || || |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to PHP 3.0.12 and PHP4 Beta2 so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers|| || || |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions|| || || |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant|| || || |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions|| || || |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code> ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 9de801d29261ec0d9998a3f931d3a0632a1eca9b 1646 1645 2007-09-30T02:24:40Z Stevenlawrance 1 /* Team software */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://www.eclipse.org/ Eclipse], [http://en.wikipedia.org/wiki/Standard_Widget_Toolkit SWT], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/JNI JNI]||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/JNI JNI], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/IIS IIS], [http://en.wikipedia.org/wiki/Component_object_model COM]||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using CVS in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]|| ||69,015||2001-2005 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/Mysql MySQL]||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||[http://en.wikipedia.org/wiki/BASIC_Stamp Parallax BASIC Stamp], [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||[http://en.wikipedia.org/wiki/Php PHP], [http://en.wikipedia.org/wiki/Mysql MySQL], [http://en.wikipedia.org/wiki/Javascript JavaScript]|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com|| {{smn}}|| || |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind|| || || |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry|| || || |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || || |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || || |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || {{smn}}|| |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || || |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| || || |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to PHP 3.0.12 and PHP4 Beta2 so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers|| || || |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions|| || || |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant|| || || |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions|| || || |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code> ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] c535b615b09496656329926fb232fece7596aa2d 1647 1646 2007-09-30T02:26:59Z Stevenlawrance 1 /* Team software */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://www.eclipse.org/ Eclipse], [http://en.wikipedia.org/wiki/Standard_Widget_Toolkit SWT], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/JNI JNI]||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/JNI JNI], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/IIS IIS], [http://en.wikipedia.org/wiki/Component_object_model COM]||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]|| ||69,015||2001-2005 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/Mysql MySQL]||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||[http://en.wikipedia.org/wiki/BASIC_Stamp Parallax BASIC Stamp], [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||[http://en.wikipedia.org/wiki/Php PHP], [http://en.wikipedia.org/wiki/Mysql MySQL], [http://en.wikipedia.org/wiki/Javascript JavaScript]|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com|| {{smn}}|| || |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind|| || || |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry|| || || |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || || |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || || |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || {{smn}}|| |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || || |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| || || |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to PHP 3.0.12 and PHP4 Beta2 so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers|| || || |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions|| || || |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant|| || || |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions|| || || |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code> ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 532016146ed1c6e301028b0212b61699cd1eb833 1648 1647 2007-09-30T02:31:54Z Stevenlawrance 1 /* Team software */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://www.eclipse.org/ Eclipse], [http://en.wikipedia.org/wiki/Standard_Widget_Toolkit SWT], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/JNI JNI]||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years. I actively maintained this system with a colleague at the [http://www.sfdph.org/ San Francisco Department of Public Health] (DPH) [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/JNI JNI], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/IIS IIS], [http://en.wikipedia.org/wiki/Component_object_model COM]||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a test-driven development process for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||69,015||2001-2005 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/Mysql MySQL]||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||[http://en.wikipedia.org/wiki/BASIC_Stamp Parallax BASIC Stamp], [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||[http://en.wikipedia.org/wiki/Php PHP], [http://en.wikipedia.org/wiki/Mysql MySQL], [http://en.wikipedia.org/wiki/Javascript JavaScript]|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com|| {{smn}}|| || |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind|| || || |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry|| || || |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || || |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || || |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || {{smn}}|| |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || || |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| || || |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to PHP 3.0.12 and PHP4 Beta2 so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers|| || || |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions|| || || |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant|| || || |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions|| || || |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code> ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 3aac3c8d702bd6e6cd4f261de547edddc767e7b2 1650 1648 2007-09-30T03:16:40Z Stevenlawrance 1 /* Team software */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://www.eclipse.org/ Eclipse], [http://en.wikipedia.org/wiki/Standard_Widget_Toolkit SWT], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/JNI JNI]||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years. I actively maintained this system with a colleague at the [http://www.sfdph.org/ San Francisco Department of Public Health] (DPH) [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/JNI JNI], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/IIS IIS], [http://en.wikipedia.org/wiki/Component_object_model COM]||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||69,015||2001-2005 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/Mysql MySQL]||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||[http://en.wikipedia.org/wiki/BASIC_Stamp Parallax BASIC Stamp], [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||[http://en.wikipedia.org/wiki/Php PHP], [http://en.wikipedia.org/wiki/Mysql MySQL], [http://en.wikipedia.org/wiki/Javascript JavaScript]|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com|| {{smn}}|| || |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind|| || || |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry|| || || |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || || |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || || |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || {{smn}}|| |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || || |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| || || |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to PHP 3.0.12 and PHP4 Beta2 so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers|| || || |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions|| || || |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant|| || || |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions|| || || |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code> ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] b9e1a6977907343db937f678c20b74ad5e98fd07 1651 1650 2007-09-30T03:20:38Z Stevenlawrance 1 /* Software and project contributions */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://www.eclipse.org/ Eclipse], [http://en.wikipedia.org/wiki/Standard_Widget_Toolkit SWT], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/JNI JNI]||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years. I actively maintained this system with a colleague at the [http://www.sfdph.org/ San Francisco Department of Public Health] (DPH) [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/JNI JNI], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/IIS IIS], [http://en.wikipedia.org/wiki/Component_object_model COM]||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||69,015||2001-2005 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/Mysql MySQL]||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||[http://en.wikipedia.org/wiki/BASIC_Stamp Parallax BASIC Stamp], [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||[http://en.wikipedia.org/wiki/Php PHP], [http://en.wikipedia.org/wiki/Mysql MySQL], [http://en.wikipedia.org/wiki/Javascript JavaScript]|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com|| {{smn}}|| || |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind|| || || |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry|| || || |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || || |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || || |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || {{smn}}|| |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || || |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| || || |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to PHP 3.0.12 and PHP4 Beta2 so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers|| || || |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions|| || || |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant|| || || |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions|| || || |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 097c9dcff7a37346dd82ceda6d3e1519d064b2c5 1652 1651 2007-09-30T04:20:43Z Stevenlawrance 1 /* [http://www.salesforce.com/ Salesforce.com] */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://www.eclipse.org/ Eclipse], [http://en.wikipedia.org/wiki/Standard_Widget_Toolkit SWT], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/JNI JNI]||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years. I actively maintained this system with a colleague at the [http://www.sfdph.org/ San Francisco Department of Public Health] (DPH) [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/JNI JNI], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/IIS IIS], [http://en.wikipedia.org/wiki/Component_object_model COM]||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||69,015||2001-2005 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for parking garage usage tracking. This was an academic project||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/Mysql MySQL]||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||[http://en.wikipedia.org/wiki/BASIC_Stamp Parallax BASIC Stamp], [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||[http://en.wikipedia.org/wiki/Php PHP], [http://en.wikipedia.org/wiki/Mysql MySQL], [http://en.wikipedia.org/wiki/Javascript JavaScript]|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com|| {{smn}}|| || |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind|| || || |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry|| || || |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || || |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || || |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || {{smn}}|| |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || || |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| || || |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to PHP 3.0.12 and PHP4 Beta2 so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers|| || || |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions|| || || |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant|| || || |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions|| || || |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] a801f7fb8b1c336155323a425785d8898e240ff0 1653 1652 2007-09-30T04:24:45Z Stevenlawrance 1 /* Team software */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Main_Page URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://www.eclipse.org/ Eclipse], [http://en.wikipedia.org/wiki/Standard_Widget_Toolkit SWT], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/JNI JNI]||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years. I actively maintained this system with a colleague at the [http://www.sfdph.org/ San Francisco Department of Public Health] (DPH) [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/JNI JNI], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/IIS IIS], [http://en.wikipedia.org/wiki/Component_object_model COM]||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||69,015||2001-2005 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/Mysql MySQL]||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||[http://en.wikipedia.org/wiki/BASIC_Stamp Parallax BASIC Stamp], [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||[http://en.wikipedia.org/wiki/Php PHP], [http://en.wikipedia.org/wiki/Mysql MySQL], [http://en.wikipedia.org/wiki/Javascript JavaScript]|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com|| {{smn}}|| || |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind|| || || |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry|| || || |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || || |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || || |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || {{smn}}|| |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || || |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| || || |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to PHP 3.0.12 and PHP4 Beta2 so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers|| || || |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions|| || || |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant|| || || |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions|| || || |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 9573229e9d492560484bf14e4eb94ccd91fa7399 1654 1653 2007-09-30T04:25:49Z Stevenlawrance 1 /* Interests */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://www.eclipse.org/ Eclipse], [http://en.wikipedia.org/wiki/Standard_Widget_Toolkit SWT], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/JNI JNI]||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years. I actively maintained this system with a colleague at the [http://www.sfdph.org/ San Francisco Department of Public Health] (DPH) [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/JNI JNI], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/IIS IIS], [http://en.wikipedia.org/wiki/Component_object_model COM]||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||69,015||2001-2005 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/Mysql MySQL]||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||[http://en.wikipedia.org/wiki/BASIC_Stamp Parallax BASIC Stamp], [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||[http://en.wikipedia.org/wiki/Php PHP], [http://en.wikipedia.org/wiki/Mysql MySQL], [http://en.wikipedia.org/wiki/Javascript JavaScript]|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com|| {{smn}}|| || |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind|| || || |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry|| || || |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || || |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || || |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || {{smn}}|| |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || || |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| || || |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to PHP 3.0.12 and PHP4 Beta2 so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers|| || || |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions|| || || |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant|| || || |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions|| || || |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] b53ea30ba0bafb10b3495da0768716af1191ed51 1655 1654 2007-09-30T04:29:29Z Stevenlawrance 1 /* Software and project contributions */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://www.eclipse.org/ Eclipse], [http://en.wikipedia.org/wiki/Standard_Widget_Toolkit SWT], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/JNI JNI]||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years. I actively maintained this system with a colleague at the [http://www.sfdph.org/ San Francisco Department of Public Health] (DPH) [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/JNI JNI], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/IIS IIS], [http://en.wikipedia.org/wiki/Component_object_model COM]||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||69,015||2001-2005 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/Mysql MySQL]||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||[http://en.wikipedia.org/wiki/BASIC_Stamp Parallax BASIC Stamp], [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||[http://en.wikipedia.org/wiki/Php PHP], [http://en.wikipedia.org/wiki/Mysql MySQL], [http://en.wikipedia.org/wiki/Javascript JavaScript]|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com|| {{smn}}|| || |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind|| || || |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry|| || || |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || || |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || || |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || {{smn}}|| |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || || |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| || || |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to PHP 3.0.12 and PHP4 Beta2 so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers|| || || |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions|| || || |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant|| || || |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions|| || || |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] c86e6248078f78412db5dbad322fcdc7f2d7d027 File:Dpo.png 6 1455 1610 2007-09-29T23:03:05Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 1611 1610 2007-09-29T23:10:52Z Stevenlawrance 1 uploaded a new version of "[[Image:Dpo.png]]" wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 DonorPerfect Online 0 1456 1612 2007-09-29T23:11:11Z Stevenlawrance 1 New page: [[Image:Dpo.png|right]] DonorPerfect Online is a database system used by the San Francisco AIDS Foundation (SFAF) as well as other non-profit organizations. The SFAF heavily customized and... wikitext text/x-wiki [[Image:Dpo.png|right]] DonorPerfect Online is a database system used by the San Francisco AIDS Foundation (SFAF) as well as other non-profit organizations. The SFAF heavily customized and maintains a fork of DonorPerfect Online that suits the needs of the SFAF, including donor relationship management, fundraising event management, online donation processing, volunteer management, and 360-degree views of donors. My involvement consisted of migrating [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to this system using a test-driven development process for the SQL scripts as well as contributing substantially to the bulk data entry wizard, fixing bugs throughout the system, including security holes, and implementing strict URL filtering security using an Apache reverse-proxy and mod_rewrite. 2ac61a836b12f81f6feb8ab01a6beb42bcb690da 1613 1612 2007-09-29T23:12:47Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Dpo.png|right]] [http://www.donorperfect.com/ DonorPerfect Online] is a database system used by the San Francisco AIDS Foundation (SFAF) as well as other non-profit organizations. The SFAF heavily customized and maintains a fork of DonorPerfect Online that suits the needs of the SFAF, including donor relationship management, fundraising event management, online donation processing, volunteer management, and 360-degree views of donors. My involvement consisted of migrating [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to this system using a test-driven development process for the SQL scripts as well as contributing substantially to the bulk data entry wizard, fixing bugs throughout the system, including security holes, and implementing strict URL filtering security using an Apache reverse-proxy and mod_rewrite. The San Francisco AIDS Foundation and DonorPerfect Online logos on this page are trademarks of their respective owners. 2dfe414637e403a78b8256e33cc4ec16e5fff744 Reggie/CIS 0 1454 1614 1574 2007-09-29T23:16:47Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Applet-login.png|right|thumb|300px|Login screen appearance before the HIPAA-related "no trespassing" notice was added]] Reggie/CIS was a large 200-user multi-tenant three-tiered system that was used by all [http://hab.hrsa.gov/ Ryan White CARE]-funded [http://en.wikipedia.org/wiki/Aids AIDS] service organizations in [http://en.wikipedia.org/wiki/San_francisco San Francisco, California] in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] (DPH) [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years. At its peak, this system was used by more than 100 organizations. It was eventually replaced with a third-party solution as a result of reduced commitment and institutional knowledge for Reggie at the DPH. ==Motivations== Named after its champion, [http://groups.msn.com/ReggieWilliamsExhibit Reggie Williams], Reggie/CIS successfully centralized client registration data for [http://dir.yahoo.com/Regional/U_S__States/California/Metropolitan_Areas/San_Francisco_Bay_Area/Health/AIDS_HIV/Organizations/ AIDS service organizations in San Francisco], substantially easing the registration process for people living with HIV or AIDS who chose to share their registration data with other Reggie organizations when vising previously-unvisited AIDS service organizations. This meant that documents such as the letter of HIV diagnosis and [http://en.wikipedia.org/wiki/CD4 CD4] count information were entered into the system by one organization and then immediately available to all other AIDS service organizations that the client registered with. Before Reggie/CIS, clients would need to present their paperwork at every AIDS service organization that they visit when initially registering, and San Francisco is notorious for having many small, specialized AIDS service organizations for various needs such as medical care, housing subsidies, food, legal advice, disability benefits counseling, mental health, and medication adherence assistance. Reggie/CIS put each client in control of their data, permitting clients to share or unshare their data with other Reggie organizations at any time. For the DPH, the centralized data in Reggie substantially eased reporting requirements for the federal, state, and county governments. The data was actively kept unduplicated for reporting purposes while respecting each client's data sharing preferences, enabling duplication of data at the agency level while keeping clients unduplicated in reports for accurate reporting. The San Francisco AIDS Foundation and two other collaborating partners used the "CIS" part of the Reggie/CIS system, which built upon the Reggie application and database to provide customized data applications suited for the collaboration's needs. This included data entry screens and reports for rental subsidies, volunteers, care plans, progress notes, and other needs. I was the active maintainer, administrator, and software engineer of the CIS extension from 2001 to 2005, though my colleague at the DPH and I often worked on each other's part of the system when implementing new functionality. Reggie/CIS was originally implemented by a software consulting firm in 1997. It's architecture remained largely the same throughout its lifetime, though substantial improvements were made while I was one of its two to three maintainers from 2000 to 2005. It originally used Java's limited [http://en.wikipedia.org/wiki/Abstract_Windowing_Toolkit abstract windowing toolkit] (AWT) and a proprietary widget set made by a by-2000 defunct company, and my first enhancement to the system was to convert it to [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing] in the days before fancy [http://en.wikipedia.org/wiki/Refactoring refactoring] tools were readily available. Other enhancements that I added or substantially contributed to included major new features, solid stability and fault tolerance, increased manageability, easy installation and uninstallation, portability to non-Windows operating systems, and automatic upgrades. Reggie/CIS started out as a full application started with batch files, and automatic upgrades were achieved by converting that into a [http://en.wikipedia.org/wiki/Java_applet Java applet]. ==Architecture== Reggie/CIS consisted of two main systems -- data entry and reporting. The data entry system was a [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing] [http://en.wikipedia.org/wiki/Fat_client fat client] that connected with the middle-tier [http://en.wikipedia.org/wiki/Business_logic business logic] server using the [http://en.wikipedia.org/wiki/Corba common object request broker architecture] (CORBA). The middle tier connected to a [http://en.wikipedia.org/wiki/Microsoft_SQL_Server Microsoft SQL Server] database using a third party JDBC driver (Microsoft did not offer a free JDBC driver during most of Reggie/CIS's lifetime). The database consisted of approximately 100 tables, a moderate number of stored procedures, and one-way replication to two reporting database servers. Reggie/CIS's reporting system was originally written in [http://en.wikipedia.org/wiki/Vbscript Microsoft Visual Basic Script] (VBScript) and published to a closed network using [http://en.wikipedia.org/wiki/Active_Server_Pages Microsoft classic Active Server Pages] (ASP). Reports and data were made available as appropriate for the user's role and their organization, effectively hiding data that they did not have access to in the data entry application. [[PDF Access Reports|PDF reports]] were achieved with Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, enabling web-based PDF reports within the reporting system through the web browser. ===Data entry system deployment view=== A CIS-centric deployment view of the system is depicted in the following diagram: [[Image:ReggieCISServers.png]] ===Reporting system deployment view=== The reporting system also followed a three-tiered pattern: [[Image:Reporting.png]] ===Data flow view of the data entry system's login process=== The data entry client ran as a [http://en.wikipedia.org/wiki/Java_applet Java applet] and, after I left to get a master's degree at Carnegie Mellon University (CMU), as a [http://en.wikipedia.org/wiki/Webstart Java WebStart] application. Installation of the applet was made easy with a web-based multi-stage JavaScript-based installer, though its ease of use was achieved with a rather complex implementation. When the applet starts up, it obtains a reference to a business server object that it uses for object manipulation when the user logs in. This is depicted in the following diagram: [[Image:Client.png]] 276d90966243f0031fb936c11f3d4a08a3fce772 MediaWiki:Common.js 8 1417 1615 1491 2007-09-29T23:26:31Z Stevenlawrance 1 javascript text/javascript /* Any JavaScript here will be loaded for all users on every page load. */ // Highlight every other line in the software tables var orig_onload = window.onload; window.onload = function(e) { if (orig_onload != null) { orig_onload(e); } var tables = document.getElementsByTagName("table"); var rows; for (var t = 0; t < tables.length; t++) { if (tables[t].className.indexOf("software") >= 0) { rows = tables[t].rows; for (var r = 0; r < rows.length; r++) { if (r % 2 == 1) { rows[r].className = "grayrow"; } } } } } 01fcb25582b2d9a1564da90d6b39f79f0ee6b928 1616 1615 2007-09-29T23:30:14Z Stevenlawrance 1 javascript text/javascript /* Any JavaScript here will be loaded for all users on every page load. */ // Highlight every other line in the software tables var orig_onload = window.onload; window.onload = function(e) { if (orig_onload != null) { orig_onload(e); } var tables = document.getElementsByTagName("table"); for (var t = 0; t < tables.length; t++) { if (tables[t].className.indexOf("software") >= 0) { grayRows(tables[t]); } } } function grayRows(table) { var rows = table.rows; for (var r = 0; r < rows.length; r++) { if (r % 2 == 1) { rows[r].className = "grayrow"; } else { rows[r].className = ""; } } } var orig_ts_resortTable = ts_resortTable; ts_resortTable = function(evt) { orig_ts_resortTable(evt); grayRows(evt.table); } d18aca1643e5f0d4c4be3b6488323be305990632 1617 1616 2007-09-29T23:36:19Z Stevenlawrance 1 javascript text/javascript /* Any JavaScript here will be loaded for all users on every page load. */ // Highlight every other line in the software tables var orig_onload = window.onload; window.onload = function(e) { if (orig_onload != null) { orig_onload(e); } var tables = document.getElementsByTagName("table"); for (var t = 0; t < tables.length; t++) { if (tables[t].className.indexOf("software") >= 0) { grayRows(tables[t]); } } } function grayRows(table) { var rows = table.rows; for (var r = 0; r < rows.length; r++) { if (r % 2 == 1) { rows[r].className = "grayrow"; } else { rows[r].className = ""; } } } var orig_ts_resortTable = ts_resortTable; ts_resortTable = function(evt) { orig_ts_resortTable(evt); // Find the table var table = evt.target; while (table && table.tagName.toLowerCase() !== "table") { table = table.parentNode; } if (table) { grayRows(table); } } 235a6afc0af7a47f172fa0491e623d0d62d69326 1618 1617 2007-09-29T23:36:56Z Stevenlawrance 1 javascript text/javascript /* Any JavaScript here will be loaded for all users on every page load. */ // Highlight every other line in the software tables var orig_onload = window.onload; window.onload = function(e) { if (orig_onload != null) { orig_onload(e); } var tables = document.getElementsByTagName("table"); for (var t = 0; t < tables.length; t++) { if (tables[t].className.indexOf("software") >= 0) { grayRows(tables[t]); } } } function grayRows(table) { var rows = table.rows; for (var r = 0; r < rows.length; r++) { if (r % 2 == 1) { rows[r].className = "grayrow"; } else { rows[r].className = ""; } } } var orig_ts_resortTable = ts_resortTable; ts_resortTable = function(evt) { orig_ts_resortTable(evt); // Find the table var table = evt.target; while (table && table.tagName.toLowerCase() != "table") { table = table.parentNode; } if (table) { grayRows(table); } } b98d5290467623285fa1fb718e542af0d1734f8f 1619 1618 2007-09-29T23:37:37Z Stevenlawrance 1 javascript text/javascript /* Any JavaScript here will be loaded for all users on every page load. */ // Highlight every other line in the software tables var orig_onload = window.onload; window.onload = function(e) { if (orig_onload != null) { orig_onload(e); } var tables = document.getElementsByTagName("table"); for (var t = 0; t < tables.length; t++) { if (tables[t].className.indexOf("software") >= 0) { grayRows(tables[t]); } } } function grayRows(table) { var rows = table.rows; for (var r = 0; r < rows.length; r++) { if (r % 2 == 1) { rows[r].className = "grayrow"; } else { rows[r].className = ""; } } } var orig_ts_resortTable = ts_resortTable; ts_resortTable = function(evt) { orig_ts_resortTable(evt); // Find the table var table = evt.target; while (table && table.tagName.toLowerCase() != "table") { alert(table.tagName); table = table.parentNode; } if (table) { grayRows(table); } } 15f48d22ee34e0f3089ae5235d3cea9ce1946d6a 1620 1619 2007-09-29T23:40:53Z Stevenlawrance 1 javascript text/javascript /* Any JavaScript here will be loaded for all users on every page load. */ // Highlight every other line in the software tables var orig_onload = window.onload; window.onload = function(e) { if (orig_onload != null) { orig_onload(e); } var tables = document.getElementsByTagName("table"); for (var t = 0; t < tables.length; t++) { if (tables[t].className.indexOf("software") >= 0) { grayRows(tables[t]); } } } function grayRows(table) { var rows = table.rows; for (var r = 0; r < rows.length; r++) { if (r % 2 == 1) { rows[r].className = "grayrow"; } else { rows[r].className = ""; } } } var orig_ts_resortTable = ts_resortTable; ts_resortTable = function(evt) { orig_ts_resortTable(evt); // Find the table var table = evt; while (table && table.tagName.toLowerCase() != "table") { table = table.parentNode; } if (table) { grayRows(table); } } cbdcf6b9146a59f64d1b7f5f91e2ad09eaf9e140 1623 1620 2007-09-29T23:53:10Z Stevenlawrance 1 javascript text/javascript /* Any JavaScript here will be loaded for all users on every page load. */ // Highlight every other line in the software tables var orig_onload = window.onload; window.onload = function(e) { if (orig_onload != null) { orig_onload(e); } var tables = document.getElementsByTagName("table"); var rows; for (var t = 0; t < tables.length; t++) { if (tables[t].className.indexOf("software") >= 0) { grayRows(tables[t]); // Give the second-to-last cell a width of 15em (CSS lets us do this, but, sadly, browsers don't implement nth-child) if (table.rows.length > 2) { table.rows[table.rows.length - 2].width = "15em"; } } } } function grayRows(table) { var rows = table.rows; for (var r = 0; r < rows.length; r++) { if (r % 2 == 1) { rows[r].className = "grayrow"; } else { rows[r].className = ""; } } } var orig_ts_resortTable = ts_resortTable; ts_resortTable = function(evt) { orig_ts_resortTable(evt); // Find the table var table = evt; while (table && table.tagName.toLowerCase() != "table") { table = table.parentNode; } if (table) { grayRows(table); } } f398811eab07ef012d463699b2596896bbda322c 1625 1623 2007-09-29T23:54:20Z Stevenlawrance 1 javascript text/javascript /* Any JavaScript here will be loaded for all users on every page load. */ // Highlight every other line in the software tables var orig_onload = window.onload; window.onload = function(e) { if (orig_onload != null) { orig_onload(e); } var tables = document.getElementsByTagName("table"); var rows; for (var t = 0; t < tables.length; t++) { if (tables[t].className.indexOf("software") >= 0) { grayRows(tables[t]); // Give the second-to-last cell a width of 15em (CSS lets us do this, but, sadly, browsers don't implement nth-child) if (tables[t].rows.length > 2) { tables[t].rows[tables[t].rows.length - 2].width = "15em"; } } } } function grayRows(table) { var rows = table.rows; for (var r = 0; r < rows.length; r++) { if (r % 2 == 1) { rows[r].className = "grayrow"; } else { rows[r].className = ""; } } } var orig_ts_resortTable = ts_resortTable; ts_resortTable = function(evt) { orig_ts_resortTable(evt); // Find the table var table = evt; while (table && table.tagName.toLowerCase() != "table") { table = table.parentNode; } if (table) { grayRows(table); } } 77c0280e4330fb08ebb03a13848e9d716eb5a5ee 1626 1625 2007-09-29T23:55:39Z Stevenlawrance 1 javascript text/javascript /* Any JavaScript here will be loaded for all users on every page load. */ // Highlight every other line in the software tables var orig_onload = window.onload; window.onload = function(e) { if (orig_onload != null) { orig_onload(e); } var tables = document.getElementsByTagName("table"); var rows; for (var t = 0; t < tables.length; t++) { if (tables[t].className.indexOf("software") >= 0) { grayRows(tables[t]); // Give the second-to-last cell a width of 15em (CSS lets us do this, but, sadly, browsers don't implement nth-child) if (tables[t].rows.length > 2) { tables[t].rows[tables[t].rows.length - 2].style="width: 15em;"; } } } } function grayRows(table) { var rows = table.rows; for (var r = 0; r < rows.length; r++) { if (r % 2 == 1) { rows[r].className = "grayrow"; } else { rows[r].className = ""; } } } var orig_ts_resortTable = ts_resortTable; ts_resortTable = function(evt) { orig_ts_resortTable(evt); // Find the table var table = evt; while (table && table.tagName.toLowerCase() != "table") { table = table.parentNode; } if (table) { grayRows(table); } } 346815a7566d1356fe802df27859b4eef9952e70 1627 1626 2007-09-29T23:59:04Z Stevenlawrance 1 javascript text/javascript /* Any JavaScript here will be loaded for all users on every page load. */ // Highlight every other line in the software tables var orig_onload = window.onload; window.onload = function(e) { if (orig_onload != null) { orig_onload(e); } var tables = document.getElementsByTagName("table"); var rows; for (var t = 0; t < tables.length; t++) { if (tables[t].className.indexOf("software") >= 0) { grayRows(tables[t]); // Give the second-to-last cell a width of 15em (CSS lets us do this, but, sadly, browsers don't implement nth-child) rows = table.rows; for (var r = 0; r < rows.length; r++) { if (rows[r].lastChild && rows[r].lastChild.previousSibling) { rows[r].lastChild.previousSibling.style += "width: 15em;"; } } } } } function grayRows(table) { var rows = table.rows; for (var r = 0; r < rows.length; r++) { if (r % 2 == 1) { rows[r].className = "grayrow"; } else { rows[r].className = ""; } } } var orig_ts_resortTable = ts_resortTable; ts_resortTable = function(evt) { orig_ts_resortTable(evt); // Find the table var table = evt; while (table && table.tagName.toLowerCase() != "table") { table = table.parentNode; } if (table) { grayRows(table); } } bef03e71f63a3a9d1a26703cfa92e9f2736b31b0 1628 1627 2007-09-29T23:59:31Z Stevenlawrance 1 javascript text/javascript /* Any JavaScript here will be loaded for all users on every page load. */ // Highlight every other line in the software tables var orig_onload = window.onload; window.onload = function(e) { if (orig_onload != null) { orig_onload(e); } var tables = document.getElementsByTagName("table"); var rows; for (var t = 0; t < tables.length; t++) { if (tables[t].className.indexOf("software") >= 0) { grayRows(tables[t]); // Give the second-to-last cell a width of 15em (CSS lets us do this, but, sadly, browsers don't implement nth-child) rows = tables[t].rows; for (var r = 0; r < rows.length; r++) { if (rows[r].lastChild && rows[r].lastChild.previousSibling) { rows[r].lastChild.previousSibling.style += "width: 15em;"; } } } } } function grayRows(table) { var rows = table.rows; for (var r = 0; r < rows.length; r++) { if (r % 2 == 1) { rows[r].className = "grayrow"; } else { rows[r].className = ""; } } } var orig_ts_resortTable = ts_resortTable; ts_resortTable = function(evt) { orig_ts_resortTable(evt); // Find the table var table = evt; while (table && table.tagName.toLowerCase() != "table") { table = table.parentNode; } if (table) { grayRows(table); } } 04646267dcb1b98dd14c4d0b824b7d0806ce1833 1629 1628 2007-09-30T00:00:40Z Stevenlawrance 1 javascript text/javascript /* Any JavaScript here will be loaded for all users on every page load. */ // Highlight every other line in the software tables var orig_onload = window.onload; window.onload = function(e) { if (orig_onload != null) { orig_onload(e); } var tables = document.getElementsByTagName("table"); var rows; for (var t = 0; t < tables.length; t++) { if (tables[t].className.indexOf("software") >= 0) { grayRows(tables[t]); // Give the second-to-last cell a width of 15em (CSS lets us do this, but, sadly, browsers don't implement nth-child) rows = tables[t].rows; for (var r = 0; r < rows.length; r++) { if (rows[r].lastChild && rows[r].lastChild.previousSibling) { rows[r].lastChild.previousSibling.width = "15em"; } } } } } function grayRows(table) { var rows = table.rows; for (var r = 0; r < rows.length; r++) { if (r % 2 == 1) { rows[r].className = "grayrow"; } else { rows[r].className = ""; } } } var orig_ts_resortTable = ts_resortTable; ts_resortTable = function(evt) { orig_ts_resortTable(evt); // Find the table var table = evt; while (table && table.tagName.toLowerCase() != "table") { table = table.parentNode; } if (table) { grayRows(table); } } 58a3deffed81d0cefbdb7ce964dc367617e51da8 1630 1629 2007-09-30T00:01:55Z Stevenlawrance 1 javascript text/javascript /* Any JavaScript here will be loaded for all users on every page load. */ // Highlight every other line in the software tables var orig_onload = window.onload; window.onload = function(e) { if (orig_onload != null) { orig_onload(e); } var tables = document.getElementsByTagName("table"); var rows; for (var t = 0; t < tables.length; t++) { if (tables[t].className.indexOf("software") >= 0) { grayRows(tables[t]); // Give the second-to-last cell a width of 15em (CSS lets us do this, but, sadly, browsers don't implement nth-child) rows = tables[t].rows; for (var r = 0; r < rows.length; r++) { if (rows[r].lastChild && rows[r].lastChild.previousSibling) { rows[r].lastChild.previousSibling.style.width = "15em"; } } } } } function grayRows(table) { var rows = table.rows; for (var r = 0; r < rows.length; r++) { if (r % 2 == 1) { rows[r].className = "grayrow"; } else { rows[r].className = ""; } } } var orig_ts_resortTable = ts_resortTable; ts_resortTable = function(evt) { orig_ts_resortTable(evt); // Find the table var table = evt; while (table && table.tagName.toLowerCase() != "table") { table = table.parentNode; } if (table) { grayRows(table); } } 9f844d0875861dd17ff57f2ff4cbca66dd68a430 1634 1630 2007-09-30T00:15:59Z Stevenlawrance 1 javascript text/javascript /* Any JavaScript here will be loaded for all users on every page load. */ // Highlight every other line in the software tables var orig_onload = window.onload; window.onload = function(e) { if (orig_onload != null) { orig_onload(e); } var tables = document.getElementsByTagName("table"); var rows; for (var t = 0; t < tables.length; t++) { if (tables[t].className.indexOf("software") >= 0) { grayRows(tables[t]); // Give the third-to-last cell a width of 15em (CSS lets us do this, but, sadly, browsers don't implement nth-child) // and the second-to-last cell a width of 5em rows = tables[t].rows; for (var r = 0; r < rows.length; r++) { if (rows[r].lastChild && rows[r].lastChild.previousSibling) { var secondToLast = rows[r].lastChild.previousSibling; secondToLast.style.width = "5em"; if (secondToLast.previousSibling) { secondToLast.previousSibling.style.width = "15em"; } } } } } } function grayRows(table) { var rows = table.rows; for (var r = 0; r < rows.length; r++) { if (r % 2 == 1) { rows[r].className = "grayrow"; } else { rows[r].className = ""; } } } var orig_ts_resortTable = ts_resortTable; ts_resortTable = function(evt) { orig_ts_resortTable(evt); // Find the table var table = evt; while (table && table.tagName.toLowerCase() != "table") { table = table.parentNode; } if (table) { grayRows(table); } } d9f4de426a10b80f60fc01e1d20d054962677ca9 1636 1634 2007-09-30T00:45:23Z Stevenlawrance 1 javascript text/javascript /* Any JavaScript here will be loaded for all users on every page load. */ // Highlight every other line in the software tables var orig_onload = window.onload; window.onload = function(e) { if (orig_onload != null) { orig_onload(e); } var tables = document.getElementsByTagName("table"); var rows; for (var t = 0; t < tables.length; t++) { if (tables[t].className.indexOf("software") >= 0) { grayRows(tables[t]); // Give the third-to-last cell a width of 15em (CSS lets us do this, but, sadly, browsers don't implement nth-child) // and the second-to-last cell a width of 5em rows = tables[t].rows; for (var r = 0; r < rows.length; r++) { if (rows[r].lastChild && rows[r].lastChild.previousSibling) { var secondToLast = rows[r].lastChild.previousSibling; secondToLast.style.width = "5em"; secondToLast.style.align = "right"; if (secondToLast.previousSibling) { secondToLast.previousSibling.style.width = "15em"; } } } } } } function grayRows(table) { var rows = table.rows; for (var r = 0; r < rows.length; r++) { if (r % 2 == 1) { rows[r].className = "grayrow"; } else { rows[r].className = ""; } } } var orig_ts_resortTable = ts_resortTable; ts_resortTable = function(evt) { orig_ts_resortTable(evt); // Find the table var table = evt; while (table && table.tagName.toLowerCase() != "table") { table = table.parentNode; } if (table) { grayRows(table); } } 13f1c47cca559ff91b93f31d69690809f6d2ad76 1637 1636 2007-09-30T00:47:15Z Stevenlawrance 1 javascript text/javascript /* Any JavaScript here will be loaded for all users on every page load. */ // Highlight every other line in the software tables var orig_onload = window.onload; window.onload = function(e) { if (orig_onload != null) { orig_onload(e); } var tables = document.getElementsByTagName("table"); var rows; for (var t = 0; t < tables.length; t++) { if (tables[t].className.indexOf("software") >= 0) { grayRows(tables[t]); // Give the third-to-last cell a width of 15em (CSS lets us do this, but, sadly, browsers don't implement nth-child) // and the second-to-last cell a width of 5em rows = tables[t].rows; for (var r = 0; r < rows.length; r++) { if (rows[r].lastChild && rows[r].lastChild.previousSibling) { var secondToLast = rows[r].lastChild.previousSibling; secondToLast.style.width = "5em"; secondToLast.style.textAlign = "right"; if (secondToLast.previousSibling) { secondToLast.previousSibling.style.width = "15em"; } } } } } } function grayRows(table) { var rows = table.rows; for (var r = 0; r < rows.length; r++) { if (r % 2 == 1) { rows[r].className = "grayrow"; } else { rows[r].className = ""; } } } var orig_ts_resortTable = ts_resortTable; ts_resortTable = function(evt) { orig_ts_resortTable(evt); // Find the table var table = evt; while (table && table.tagName.toLowerCase() != "table") { table = table.parentNode; } if (table) { grayRows(table); } } 088ffe040e2da9977e8561d35be50052dedf88b3 1638 1637 2007-09-30T00:48:14Z Stevenlawrance 1 javascript text/javascript /* Any JavaScript here will be loaded for all users on every page load. */ // Highlight every other line in the software tables var orig_onload = window.onload; window.onload = function(e) { if (orig_onload != null) { orig_onload(e); } var tables = document.getElementsByTagName("table"); var rows; for (var t = 0; t < tables.length; t++) { if (tables[t].className.indexOf("software") >= 0) { grayRows(tables[t]); // Give the third-to-last cell a width of 15em (CSS lets us do this, but, sadly, browsers don't implement nth-child) // and the second-to-last cell a width of 5em rows = tables[t].rows; for (var r = 0; r < rows.length; r++) { if (rows[r].lastChild && rows[r].lastChild.previousSibling) { var secondToLast = rows[r].lastChild.previousSibling; secondToLast.style.width = "5em"; if (secondToLast.tagName.toLowerCase() == "td") { secondToLast.style.textAlign = "right"; } if (secondToLast.previousSibling) { secondToLast.previousSibling.style.width = "15em"; } } } } } } function grayRows(table) { var rows = table.rows; for (var r = 0; r < rows.length; r++) { if (r % 2 == 1) { rows[r].className = "grayrow"; } else { rows[r].className = ""; } } } var orig_ts_resortTable = ts_resortTable; ts_resortTable = function(evt) { orig_ts_resortTable(evt); // Find the table var table = evt; while (table && table.tagName.toLowerCase() != "table") { table = table.parentNode; } if (table) { grayRows(table); } } 43a3ddcd6b5165487ccb8528a8750b14a494cae8 1639 1638 2007-09-30T00:48:50Z Stevenlawrance 1 javascript text/javascript /* Any JavaScript here will be loaded for all users on every page load. */ // Highlight every other line in the software tables var orig_onload = window.onload; window.onload = function(e) { if (orig_onload != null) { orig_onload(e); } var tables = document.getElementsByTagName("table"); var rows; for (var t = 0; t < tables.length; t++) { if (tables[t].className.indexOf("software") >= 0) { grayRows(tables[t]); // Give the third-to-last cell a width of 15em (CSS lets us do this, but, sadly, browsers don't implement nth-child) // and the second-to-last cell a width of 7em rows = tables[t].rows; for (var r = 0; r < rows.length; r++) { if (rows[r].lastChild && rows[r].lastChild.previousSibling) { var secondToLast = rows[r].lastChild.previousSibling; secondToLast.style.width = "7em"; if (secondToLast.tagName.toLowerCase() == "td") { secondToLast.style.textAlign = "right"; } if (secondToLast.previousSibling) { secondToLast.previousSibling.style.width = "15em"; } } } } } } function grayRows(table) { var rows = table.rows; for (var r = 0; r < rows.length; r++) { if (r % 2 == 1) { rows[r].className = "grayrow"; } else { rows[r].className = ""; } } } var orig_ts_resortTable = ts_resortTable; ts_resortTable = function(evt) { orig_ts_resortTable(evt); // Find the table var table = evt; while (table && table.tagName.toLowerCase() != "table") { table = table.parentNode; } if (table) { grayRows(table); } } 8b9a001fdf07a1932653e773117d09d567f47e8c 1640 1639 2007-09-30T00:49:11Z Stevenlawrance 1 javascript text/javascript /* Any JavaScript here will be loaded for all users on every page load. */ // Highlight every other line in the software tables var orig_onload = window.onload; window.onload = function(e) { if (orig_onload != null) { orig_onload(e); } var tables = document.getElementsByTagName("table"); var rows; for (var t = 0; t < tables.length; t++) { if (tables[t].className.indexOf("software") >= 0) { grayRows(tables[t]); // Give the third-to-last cell a width of 15em (CSS lets us do this, but, sadly, browsers don't implement nth-child) // and the second-to-last cell a width of 6em rows = tables[t].rows; for (var r = 0; r < rows.length; r++) { if (rows[r].lastChild && rows[r].lastChild.previousSibling) { var secondToLast = rows[r].lastChild.previousSibling; secondToLast.style.width = "6em"; if (secondToLast.tagName.toLowerCase() == "td") { secondToLast.style.textAlign = "right"; } if (secondToLast.previousSibling) { secondToLast.previousSibling.style.width = "15em"; } } } } } } function grayRows(table) { var rows = table.rows; for (var r = 0; r < rows.length; r++) { if (r % 2 == 1) { rows[r].className = "grayrow"; } else { rows[r].className = ""; } } } var orig_ts_resortTable = ts_resortTable; ts_resortTable = function(evt) { orig_ts_resortTable(evt); // Find the table var table = evt; while (table && table.tagName.toLowerCase() != "table") { table = table.parentNode; } if (table) { grayRows(table); } } b8f6e4c9d1de10fb59d463d8800129d81941103c Template:Smn 10 1457 1644 2007-09-30T01:47:28Z Stevenlawrance 1 New page: <span style="display:none">sm=n</span> wikitext text/x-wiki <span style="display:none">sm=n</span> fae21af609b7d3f93c0b2bbfbc7bfc8f20d5488f SFAF CRM 0 1458 1649 2007-09-30T02:35:58Z Stevenlawrance 1 New page: The [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Customer_relationship_management customer relationship management (CRM)] primarily serves the organ... wikitext text/x-wiki The [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Customer_relationship_management customer relationship management (CRM)] primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]. SFAF CRM was implemented as [http://en.wikipedia.org/wiki/Active_Server_Pages Microsoft classic VBScript ASP pages], though it likely has evolved since I left the SFAF to get a software engineering degree at Carnegie Mellon University. 7e003677e5c7d148c7445b6b155a1f02ac877fc1 Park 'N Park 0 1459 1656 2007-09-30T04:36:02Z Stevenlawrance 1 New page: Park 'N Park is a fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project for the "Fault Tolerant, Distributed, Real... wikitext text/x-wiki Park 'N Park is a fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project for the "Fault Tolerant, Distributed, Real-Time Systems" course taught by [http://www.cs.cmu.edu/~priya/ Associate Professor Priya Narasimhan] during the Spring semester of 2006. Park 'N Park manages parking lots by keeping track of how many spaces are available in lots and recommends other lots when the lot a driver is at is full. The Park 'N Park name is a play on the name of the [http://en.wikipedia.org/wiki/Eat'n_Park Eat'n Park] chain of restaurants in the northeast states of [http://en.wikipedia.org/wiki/Usa America]. 3d40b4c54bc01fc14b569f6b11aab68ad60a2b9f Park 'N Park 0 1459 1657 1656 2007-09-30T04:37:41Z Stevenlawrance 1 wikitext text/x-wiki Park 'N Park is a fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project for the "Fault Tolerant, Distributed, Real-Time Systems" course taught by [http://www.cs.cmu.edu/~priya/ Associate Professor Priya Narasimhan] during the Spring semester of 2006. Park 'N Park manages parking lots by keeping track of how many spaces are available in lots and recommends other lots when the lot a driver is at is full. The Park 'N Park name is a play on the name of the [http://en.wikipedia.org/wiki/Eat'n_Park Eat'n Park] chain of restaurants in the northeast states of [http://en.wikipedia.org/wiki/Usa America]. [http://www.ece.cmu.edu/~ece749/teams-06/team6/ More information about this project exists on its web site at Carnegie Mellon University]. 84bd86b520b13a54726d4eb26085cc8c88d0343b 1658 1657 2007-09-30T04:39:47Z Stevenlawrance 1 wikitext text/x-wiki Park 'N Park is a fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project for the "Fault Tolerant, Distributed, Real-Time Systems" course taught by [http://www.cs.cmu.edu/~priya/ Associate Professor Priya Narasimhan] during the Spring semester of 2006. Park 'N Park manages parking lots by keeping track of how many spaces are available in lots and recommends other lots when the lot a driver is at is full. The Park 'N Park name is a play on the name of the [http://en.wikipedia.org/wiki/Eat'n_Park Eat'n Park] chain of restaurants in the northeast states of [http://en.wikipedia.org/wiki/Usa America]. [http://www.ece.cmu.edu/~ece749/teams-06/team6/ More information about this project exists on its web site at Carnegie Mellon University], including roles, database schema, and the [http://www.ece.cmu.edu/~ece749/teams-06/team6/final_demo/sourcecode.tar.gz source code]. 8a589ea810c11c528e6f8da90b639a51c519a917 1659 1658 2007-09-30T04:48:06Z Stevenlawrance 1 wikitext text/x-wiki Park 'N Park is a fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project for the "Fault Tolerant, Distributed, Real-Time Systems" course taught by [http://www.cs.cmu.edu/~priya/ Associate Professor Priya Narasimhan] during the Spring semester of 2006. Park 'N Park manages parking lots by keeping track of how many spaces are available in lots and recommends other lots when the lot a driver is at is full. This project was the capstone of the course and required the team to implement a multi-tiered, distributed system that can tolerate faults within a deterministic time to achieve real-time guarantees within specific constraints. To achieve this, the focus of the project and most of the software code implements fault handling and recovery for all points of failure in the system at and above the business logic server tier. Database disconnections and crashes are gracefully handled, though database redundancy and replication were not implemented in the project. As a team, we measured response times within the application as well as response times during faults and fault recoveries to ensure that we were meeting our real-time performance goals. The Park 'N Park name is a play on the name of the [http://en.wikipedia.org/wiki/Eat'n_Park Eat'n Park] chain of restaurants in the northeast states of [http://en.wikipedia.org/wiki/Usa America]. [http://www.ece.cmu.edu/~ece749/teams-06/team6/ More information about this project exists on its web site at Carnegie Mellon University], including roles, database schema, and the [http://www.ece.cmu.edu/~ece749/teams-06/team6/final_demo/sourcecode.tar.gz source code]. 12fea697a20c7152e8c9975e812b71f722325db5 Teacher's Pet 0 1460 1660 2007-09-30T04:58:49Z Stevenlawrance 1 New page: Teacher's Pet is a Mozilla Firefox extension that shares a web browser tab with one or more remote tabs. This permits, as an example, an instructor to share a tab with a classroom of stude... wikitext text/x-wiki Teacher's Pet is a Mozilla Firefox extension that shares a web browser tab with one or more remote tabs. This permits, as an example, an instructor to share a tab with a classroom of student computers. Whenever the instructor's page location changes on a shared tab, the remote tabs on the students' computers automatically change to match the instructor's shared tab. When the instructor moves the mouse around on the shared tab, the students see an image-based pointer on their tabs. The content below is a copy of the write-up that was turned in with the project. More information and a public release will follow in the near future. ==Introduction== Teacher's Pet was originally written as a project by [[Steven Lawrance]] and George Leontiev for the Software Architectures for User Interfaces (SAUI) class taught by [http://www.cs.cmu.edu/~jasonh/ Assistant Professor Jason Hong]. This project had a significant learning curve as one team member had not written a Mozilla Firefox extension previously, and the other team member had not delved into Firefox extensions for a while. Time constraints also shaped the scope and implementation of this extension. As per our requirements, we needed to implement at least three medium-sized features, consisting of about 200 lines of code each, that are useful and innovative. Faced with these constraints, we decided to maximize our learning and our extension's usefulness by creating our own special-purpose extension with at least three significant features. That led us to creating our own extension from scratch: Teacher's Pet. This extension relies heavily on networking to pass messages between servers and clients. It took us a bit longer to implement than we had expected, though much of that was attributed to the learning curve and tracking down a crash bug in Firefox. The experiments that we created to learn more about the Firefox extension domain gradually morphed into the implementation. While this is not the greatest software engineering practice, it fit in with our short-term lightweight project process, which was primarily an iterative design-code-test-repeat cycle. Architecture Our implementation is structured into three modules: main, client, and server. ==Main Module== The main module acts as the model of our system in a model-view-controller system view. It stores the extension's state and uses the server and client modules to communicate with peers. The view is contained in the main.xul file, which Firefox renders as a user interface. Internally, Firefox acts as the controller to move state changes to main.js, though the updateWidgetStates function in TeachersPetTab pushes state from main.js to the view. Within our extension's chrome/content folder, main.js contains the "load" and "unload" handlers for the extension, which get called when a Firefox window gets created or closed, respectively. When a new Firefox window is created, our extension registers itself as a listener for tab selection and removal events. With these window and tab events, our extension can associate a TeachersPetTab object instance with every tab in every window and methodically close those instances when tabs and/or windows are closed. Firefox events such as tab selections, window closures, mouse movements, and tab document location changes get sent to top-level JavaScript functions that look up the proper TeachersPetTab using the extension-global teachersPetTabs array. After looking up the proper TeachersPetTab, an event gets dispatched to the appropriate method on that object instance. Within the TeachersPetTab, one server and one client are lazily created upon request. These are closed when the TeachersPetTab is closed. ==Server Module== The server module, located in server.js, uses asynchronous Java TCP sockets to communicate with clients without blocking Firefox. This permits our extension to communicate with large numbers of clients without slowing down the server too much, maximizing the browsing experience for both the server user and the client users. Functions are provided to start and stop a server as well as to send a message to all clients and send a message to a specific client. Clients are represented both internally and externally by the ConnectionRecord class in network.js, which is shared with the client module. Several events exist in the server. These include line receipts from clients, client connections, and client disconnections as well as notification of when a sent line of text is either partially sent to the clients or completely sent to all clients, which can help with progress notification. Progress notification is presently not visualized in this extension, though the underlying framework exists. ==Client Module== The client module, located in client.js, uses asynchronous Java TCP sockets to communicate with a server without blocking Firefox. This lets a client receive lines of text from its connected server as well as send text lines to its server. Several events exist in the client. These include line receipts from the server, connections, disconnections, and connection failures as well as a notification when a sent line has been completely sent to the server. ==Utility== Teacher's Pet allows any group of people to navigate collectively through a series of web pages. Students can comfortably watch a presentation on their own computer as well as interact with the web sites and see where an instructor is pointing to on the screen. Such functionality can be useful in a classroom setting, especially for training that involves web sites or web-based applications. This also enables remote classroom scenarios. ==Limitations== At this time, navigations within frames are not propagated to clients. Non-frame navigation is supported, including navigation to a frame set page. On a frame-based page and on some web sites, the mouse cursor might not work. Although the extension attempts to disable all links, this action is not always successful on all links. If a connection to a server fails, the exception thrown is an InvocationTargetException instead of the correct IOException. In very rare cases, Firefox might crash when using our extension. Besides these issues, the core functionality and our set of features work very well and can be used today for non-frame web site classroom training. ==The Future== The networking code itself took some time to develop–much more time then we were expecting. This barebones system, however, has numerous applications on its own. It enables Firefox to become a lightweight server, which can be molded based on the user's needs. With this framework and our existing useful functionality, extensions on our extension are possible. Some examples include web-based personal file sharing, instant messaging, and remote administration. ==Usage== To run Teacher's Pet, install the included teacherspet.xpi file inside of Mozilla Firefox. Ensure that you have the latest Java JRE 1.5 environment installed, which this extension uses. After installing it, you can share a tab by clicking on the apple icon on the bottom-right part of the window or through the "Share Tab" menu item in the Teacher's Pet submenu within the Tools menu. As an alternative, you can also add a Teacher's Pet icon to your browser's tool bar by customizing it and using drag-and-drop to place that tool bar icon. Pressing the tool bar button without pressing the drop-down arrow will activate the "Connect to Shared Tab" menu item automatically. We had decided to apply principles of Fitts' Law to our user interface design by keeping the "Connect to Shared Tab" closer to the mouse than "Share Tab" because most users will use the "Connect to Shared Tab" command. When sharing a tab, ensure that your firewall is letting either its dynamically-assigned port through or any Firefox shared TCP ports through. On another computer or even in a different window or tab on the same computer, connect to a shared tab using one of the "Connect to Shared Tab" options. A prompt will ask you to enter in the host and port as host:port. If it's not formatted properly, the extension will notice and ask the user to modify their input to conform to the requirements. Once connected, the current tab will display the location that the server's shared tab is showing. When the server's user moves the mouse around, a red arrow will move around the client's tab and point, pointing at the same document coordinates. To disconnect, a client can select the "Disconnect from Shared Tab" command. A server can use the "Stop Sharing Tab" command to stop sharing. Note that if the server stops sharing, then the currently connected clients will get a notification that the server disconnected them. The status bar on the bottom right of the window informs the server user of how many clients are connected. It's possible for a tab to be both a client and a server. In this configuration, events from the root server propagate down the tree of servers and clients with each client+server combination propagating events to their clients. We put a lot of work into this assignment, and we plan to possibly make it open-source so that it can be extended by others and put to use by those who can benefit from its current features. f35f2209a15007334b2e13087114a01897fd5c8a 1663 1660 2007-09-30T05:28:31Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Teacherspet-server.png|thumb|375px|A shared tab indicating the number of connected clients]] [[Image:Teacherspet-client.png|thumb|375px|A client that connected to a shared tab. The red arrow follows the mouse position of the sharing tab]] Teacher's Pet is a Mozilla Firefox extension that shares a web browser tab with one or more remote tabs. This permits, as an example, an instructor to share a tab with a classroom of student computers. Whenever the instructor's page location changes on a shared tab, the remote tabs on the students' computers automatically change to match the instructor's shared tab. When the instructor moves the mouse around on the shared tab, the students see an image-based pointer on their tabs. The content below is a copy of the write-up that was turned in with the project. More information and a public release will follow in the near future. ==Introduction== Teacher's Pet was originally written as a project by [[Steven Lawrance]] and George Leontiev for the Software Architectures for User Interfaces (SAUI) class taught by [http://www.cs.cmu.edu/~jasonh/ Assistant Professor Jason Hong]. This project had a significant learning curve as one team member had not written a Mozilla Firefox extension previously, and the other team member had not delved into Firefox extensions for a while. Time constraints also shaped the scope and implementation of this extension. As per our requirements, we needed to implement at least three medium-sized features, consisting of about 200 lines of code each, that are useful and innovative. Faced with these constraints, we decided to maximize our learning and our extension's usefulness by creating our own special-purpose extension with at least three significant features. That led us to creating our own extension from scratch: Teacher's Pet. This extension relies heavily on networking to pass messages between servers and clients. It took us a bit longer to implement than we had expected, though much of that was attributed to the learning curve and tracking down a crash bug in Firefox. The experiments that we created to learn more about the Firefox extension domain gradually morphed into the implementation. While this is not the greatest software engineering practice, it fit in with our short-term lightweight project process, which was primarily an iterative design-code-test-repeat cycle. Architecture Our implementation is structured into three modules: main, client, and server. ==Main Module== The main module acts as the model of our system in a model-view-controller system view. It stores the extension's state and uses the server and client modules to communicate with peers. The view is contained in the main.xul file, which Firefox renders as a user interface. Internally, Firefox acts as the controller to move state changes to main.js, though the updateWidgetStates function in TeachersPetTab pushes state from main.js to the view. Within our extension's chrome/content folder, main.js contains the "load" and "unload" handlers for the extension, which get called when a Firefox window gets created or closed, respectively. When a new Firefox window is created, our extension registers itself as a listener for tab selection and removal events. With these window and tab events, our extension can associate a TeachersPetTab object instance with every tab in every window and methodically close those instances when tabs and/or windows are closed. Firefox events such as tab selections, window closures, mouse movements, and tab document location changes get sent to top-level JavaScript functions that look up the proper TeachersPetTab using the extension-global teachersPetTabs array. After looking up the proper TeachersPetTab, an event gets dispatched to the appropriate method on that object instance. Within the TeachersPetTab, one server and one client are lazily created upon request. These are closed when the TeachersPetTab is closed. ==Server Module== The server module, located in server.js, uses asynchronous Java TCP sockets to communicate with clients without blocking Firefox. This permits our extension to communicate with large numbers of clients without slowing down the server too much, maximizing the browsing experience for both the server user and the client users. Functions are provided to start and stop a server as well as to send a message to all clients and send a message to a specific client. Clients are represented both internally and externally by the ConnectionRecord class in network.js, which is shared with the client module. Several events exist in the server. These include line receipts from clients, client connections, and client disconnections as well as notification of when a sent line of text is either partially sent to the clients or completely sent to all clients, which can help with progress notification. Progress notification is presently not visualized in this extension, though the underlying framework exists. ==Client Module== The client module, located in client.js, uses asynchronous Java TCP sockets to communicate with a server without blocking Firefox. This lets a client receive lines of text from its connected server as well as send text lines to its server. Several events exist in the client. These include line receipts from the server, connections, disconnections, and connection failures as well as a notification when a sent line has been completely sent to the server. ==Utility== Teacher's Pet allows any group of people to navigate collectively through a series of web pages. Students can comfortably watch a presentation on their own computer as well as interact with the web sites and see where an instructor is pointing to on the screen. Such functionality can be useful in a classroom setting, especially for training that involves web sites or web-based applications. This also enables remote classroom scenarios. ==Limitations== At this time, navigations within frames are not propagated to clients. Non-frame navigation is supported, including navigation to a frame set page. On a frame-based page and on some web sites, the mouse cursor might not work. Although the extension attempts to disable all links, this action is not always successful on all links. If a connection to a server fails, the exception thrown is an InvocationTargetException instead of the correct IOException. In very rare cases, Firefox might crash when using our extension. Besides these issues, the core functionality and our set of features work very well and can be used today for non-frame web site classroom training. ==The Future== The networking code itself took some time to develop–much more time then we were expecting. This barebones system, however, has numerous applications on its own. It enables Firefox to become a lightweight server, which can be molded based on the user's needs. With this framework and our existing useful functionality, extensions on our extension are possible. Some examples include web-based personal file sharing, instant messaging, and remote administration. ==Usage== To run Teacher's Pet, install the included teacherspet.xpi file inside of Mozilla Firefox. Ensure that you have the latest Java JRE 1.5 environment installed, which this extension uses. After installing it, you can share a tab by clicking on the apple icon on the bottom-right part of the window or through the "Share Tab" menu item in the Teacher's Pet submenu within the Tools menu. As an alternative, you can also add a Teacher's Pet icon to your browser's tool bar by customizing it and using drag-and-drop to place that tool bar icon. Pressing the tool bar button without pressing the drop-down arrow will activate the "Connect to Shared Tab" menu item automatically. We had decided to apply principles of Fitts' Law to our user interface design by keeping the "Connect to Shared Tab" closer to the mouse than "Share Tab" because most users will use the "Connect to Shared Tab" command. When sharing a tab, ensure that your firewall is letting either its dynamically-assigned port through or any Firefox shared TCP ports through. On another computer or even in a different window or tab on the same computer, connect to a shared tab using one of the "Connect to Shared Tab" options. A prompt will ask you to enter in the host and port as host:port. If it's not formatted properly, the extension will notice and ask the user to modify their input to conform to the requirements. Once connected, the current tab will display the location that the server's shared tab is showing. When the server's user moves the mouse around, a red arrow will move around the client's tab and point, pointing at the same document coordinates. To disconnect, a client can select the "Disconnect from Shared Tab" command. A server can use the "Stop Sharing Tab" command to stop sharing. Note that if the server stops sharing, then the currently connected clients will get a notification that the server disconnected them. The status bar on the bottom right of the window informs the server user of how many clients are connected. It's possible for a tab to be both a client and a server. In this configuration, events from the root server propagate down the tree of servers and clients with each client+server combination propagating events to their clients. We put a lot of work into this assignment, and we plan to possibly make it open-source so that it can be extended by others and put to use by those who can benefit from its current features. b69217d70df6452db3906ba2d67c528330f8f8bf File:Teacherspet-server.png 6 1461 1661 2007-09-30T05:23:42Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Teacherspet-client.png 6 1462 1662 2007-09-30T05:23:57Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Hulk 0 1463 1664 2007-09-30T05:42:48Z Stevenlawrance 1 New page: Hulk was an embedded system group project for the [http://www.andrew.cmu.edu/user/al45/Courses_files/17643.htm Hardware for Software Engineers] course taught by [http://www.mse.cs.cmu.edu/... wikitext text/x-wiki Hulk was an embedded system group project for the [http://www.andrew.cmu.edu/user/al45/Courses_files/17643.htm Hardware for Software Engineers] course taught by [http://www.mse.cs.cmu.edu/Faculty-Lattanze.html Anthony Lattanze]. Its purpose was to successfully move six marbles from one end to the maze and back twice without dropping any marbles and in the fastest time amongst the other teams. a079f22ff71852611124a97a6f0a230b2f048b79 1667 1664 2007-09-30T06:12:55Z Stevenlawrance 1 wikitext text/x-wiki Hulk was an embedded system group project for the [http://www.andrew.cmu.edu/user/al45/Courses_files/17643.htm Hardware for Software Engineers] course taught by [http://www.mse.cs.cmu.edu/Faculty-Lattanze.html Anthony Lattanze]. Its purpose was to successfully move six marbles from one end to the maze and back twice without dropping any marbles and in the fastest time amongst the other teams. This project's circuits were designed using [http://en.wikipedia.org/wiki/MultiSIM MultiSIM] and implemented on a [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot] using [http://en.wikipedia.org/wiki/BASIC_Stamp Parallax BASIC on a BASIC Stamp] as the software. A [http://en.wikipedia.org/wiki/555_timer 555 timer] was used to control a flashing light instead of software to reduce software complexity. The team's software gracefully handled various error conditions such as hitting a corner during a turn in the maze, giving the team successful runs during the final demonstration despite performance fluctuations due to battery charge variances. The picture below shows the marble mover in action during one of its final demonstrations. [[Image:Marblemover.png]] 81fc1cb06129179cef57639e30aa6677a8fc1f60 Main Page 0 1404 1665 1584 2007-09-30T05:44:30Z Stevenlawrance 1 wikitext text/x-wiki {| |valign="top"| Welcome to Moonlight Design -- the personal web site of [[Henry Lamb]] and [[Steven Lawrance]] ==Henry Lamb== [[Henry Lamb]] is a professional [http://en.wikipedia.org/wiki/Restaurant restaurateur] trained in both [http://www.baychef.com/programs/hospitality_and_restaurant.asp restaurant management] and [http://www.baychef.com/programs/culinary_arts.asp culinary arts] at the [http://www.baychef.com/ California Culinary Academy] ==Steven Lawrance== [[Steven Lawrance]] is an active practitioner of [http://en.wikipedia.org/wiki/Software_engineering software engineering] and [http://en.wikipedia.org/wiki/Open-source_software open-source software enthusiast] trained in [http://www.mse.cs.cmu.edu/ software engineering], [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems computer information systems], and [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ business administration] [[Steven Lawrance#Software Project Experience|Check out the list of software that Steve has either written or contributed to]] |valign="top" width="25%"| {|border="1" | <font size="5">[https://www.moonlightdesign.org/urllock/ IE URL Lock]</font> <font size="5">[http://gnucashtoqif.sourceforge.net/ GnuCashToQIF]</font> <font size="5">[https://www.moonlightdesign.org/thunderforce/ Thunderforce]</font> <font size="3">[https://www.moonlightdesign.org/dirlist DirList]</font> <font size="2">[[Serendipity|Team Serendipity Master of Software Engineering (MSE) studio project]]</font> <font size="1">[[Personal financial process]]</font> |} |} 2c8454529d7f5e10f0f5a9a8909c1ee3d7c6307b 1678 1665 2007-09-30T14:39:03Z Stevenlawrance 1 /* Henry Lamb */ wikitext text/x-wiki {| |valign="top"| Welcome to Moonlight Design -- the personal web site of [[Henry Lamb]] and [[Steven Lawrance]] ==Henry Lamb== [[Henry Lamb]] is a professional [http://en.wikipedia.org/wiki/Restaurant restaurateur] and [http://en.wikipedia.org/wiki/Graphic_designer graphic designer] trained in [http://www.baychef.com/programs/hospitality_and_restaurant.asp restaurant management] and [http://www.baychef.com/programs/culinary_arts.asp culinary arts] at the [http://www.baychef.com/ California Culinary Academy] and graphic design at the [http://www.artinstitutes.edu/sanfrancisco/ Art Institute of San Francisco] and [http://www.academyart.edu/ Academy of Art University]. ==Steven Lawrance== [[Steven Lawrance]] is an active practitioner of [http://en.wikipedia.org/wiki/Software_engineering software engineering] and [http://en.wikipedia.org/wiki/Open-source_software open-source software enthusiast] trained in [http://www.mse.cs.cmu.edu/ software engineering], [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems computer information systems], and [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ business administration] [[Steven Lawrance#Software Project Experience|Check out the list of software that Steve has either written or contributed to]] |valign="top" width="25%"| {|border="1" | <font size="5">[https://www.moonlightdesign.org/urllock/ IE URL Lock]</font> <font size="5">[http://gnucashtoqif.sourceforge.net/ GnuCashToQIF]</font> <font size="5">[https://www.moonlightdesign.org/thunderforce/ Thunderforce]</font> <font size="3">[https://www.moonlightdesign.org/dirlist DirList]</font> <font size="2">[[Serendipity|Team Serendipity Master of Software Engineering (MSE) studio project]]</font> <font size="1">[[Personal financial process]]</font> |} |} c1566304535dd5693140dd81647898bcd6fcd65e 1679 1678 2007-09-30T14:39:11Z Stevenlawrance 1 /* Henry Lamb */ wikitext text/x-wiki {| |valign="top"| Welcome to Moonlight Design -- the personal web site of [[Henry Lamb]] and [[Steven Lawrance]] ==Henry Lamb== [[Henry Lamb]] is a professional [http://en.wikipedia.org/wiki/Restaurant restaurateur] and [http://en.wikipedia.org/wiki/Graphic_designer graphic designer] trained in [http://www.baychef.com/programs/hospitality_and_restaurant.asp restaurant management] and [http://www.baychef.com/programs/culinary_arts.asp culinary arts] at the [http://www.baychef.com/ California Culinary Academy] and graphic design at the [http://www.artinstitutes.edu/sanfrancisco/ Art Institute of San Francisco] and [http://www.academyart.edu/ Academy of Art University] ==Steven Lawrance== [[Steven Lawrance]] is an active practitioner of [http://en.wikipedia.org/wiki/Software_engineering software engineering] and [http://en.wikipedia.org/wiki/Open-source_software open-source software enthusiast] trained in [http://www.mse.cs.cmu.edu/ software engineering], [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems computer information systems], and [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ business administration] [[Steven Lawrance#Software Project Experience|Check out the list of software that Steve has either written or contributed to]] |valign="top" width="25%"| {|border="1" | <font size="5">[https://www.moonlightdesign.org/urllock/ IE URL Lock]</font> <font size="5">[http://gnucashtoqif.sourceforge.net/ GnuCashToQIF]</font> <font size="5">[https://www.moonlightdesign.org/thunderforce/ Thunderforce]</font> <font size="3">[https://www.moonlightdesign.org/dirlist DirList]</font> <font size="2">[[Serendipity|Team Serendipity Master of Software Engineering (MSE) studio project]]</font> <font size="1">[[Personal financial process]]</font> |} |} f59a0a6dd76619beecdf7cc5980c590d9287638d 1680 1679 2007-09-30T14:42:22Z Stevenlawrance 1 /* Henry Lamb */ wikitext text/x-wiki {| |valign="top"| Welcome to Moonlight Design -- the personal web site of [[Henry Lamb]] and [[Steven Lawrance]] ==Henry Lamb== [[Henry Lamb]] is a professional [http://en.wikipedia.org/wiki/Restaurant restaurateur] trained in both [http://www.baychef.com/programs/hospitality_and_restaurant.asp restaurant management] and [http://www.baychef.com/programs/culinary_arts.asp culinary arts] at the [http://www.baychef.com/ California Culinary Academy]. For a few years from the late 1990s to the early 2000s, Henry was a [http://en.wikipedia.org/wiki/Graphic_designer graphic designer] trained at the [http://www.artinstitutes.edu/sanfrancisco/ Art Institute of San Francisco] and the [http://www.academyart.edu/ Academy of Art University] ==Steven Lawrance== [[Steven Lawrance]] is an active practitioner of [http://en.wikipedia.org/wiki/Software_engineering software engineering] and [http://en.wikipedia.org/wiki/Open-source_software open-source software enthusiast] trained in [http://www.mse.cs.cmu.edu/ software engineering], [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems computer information systems], and [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ business administration] [[Steven Lawrance#Software Project Experience|Check out the list of software that Steve has either written or contributed to]] |valign="top" width="25%"| {|border="1" | <font size="5">[https://www.moonlightdesign.org/urllock/ IE URL Lock]</font> <font size="5">[http://gnucashtoqif.sourceforge.net/ GnuCashToQIF]</font> <font size="5">[https://www.moonlightdesign.org/thunderforce/ Thunderforce]</font> <font size="3">[https://www.moonlightdesign.org/dirlist DirList]</font> <font size="2">[[Serendipity|Team Serendipity Master of Software Engineering (MSE) studio project]]</font> <font size="1">[[Personal financial process]]</font> |} |} 42b1c9141c5c3e17f3fe96845e22b39ee92a0fbf 1681 1680 2007-09-30T14:47:54Z Stevenlawrance 1 /* Steven Lawrance */ wikitext text/x-wiki {| |valign="top"| Welcome to Moonlight Design -- the personal web site of [[Henry Lamb]] and [[Steven Lawrance]] ==Henry Lamb== [[Henry Lamb]] is a professional [http://en.wikipedia.org/wiki/Restaurant restaurateur] trained in both [http://www.baychef.com/programs/hospitality_and_restaurant.asp restaurant management] and [http://www.baychef.com/programs/culinary_arts.asp culinary arts] at the [http://www.baychef.com/ California Culinary Academy]. For a few years from the late 1990s to the early 2000s, Henry was a [http://en.wikipedia.org/wiki/Graphic_designer graphic designer] trained at the [http://www.artinstitutes.edu/sanfrancisco/ Art Institute of San Francisco] and the [http://www.academyart.edu/ Academy of Art University] ==Steven Lawrance== [[Steven Lawrance]] is an active practitioner of [http://en.wikipedia.org/wiki/Software_engineering software engineering] and [http://en.wikipedia.org/wiki/Open-source_software open-source software enthusiast] trained in [http://www.mse.cs.cmu.edu/ software engineering] at [http://www.mse.cs.cmu.edu/ Carnegie Mellon University] and [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ business administration] with [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems computer information systems] at [http://www.bryant.edu/ Bryant University] [[Steven Lawrance#Software Project Experience|Check out the list of software that Steve has either written or contributed to]] |valign="top" width="25%"| {|border="1" | <font size="5">[https://www.moonlightdesign.org/urllock/ IE URL Lock]</font> <font size="5">[http://gnucashtoqif.sourceforge.net/ GnuCashToQIF]</font> <font size="5">[https://www.moonlightdesign.org/thunderforce/ Thunderforce]</font> <font size="3">[https://www.moonlightdesign.org/dirlist DirList]</font> <font size="2">[[Serendipity|Team Serendipity Master of Software Engineering (MSE) studio project]]</font> <font size="1">[[Personal financial process]]</font> |} |} b32e19381d9cb453f3a0d63ab270062c8f21b586 File:Marblemover.png 6 1464 1666 2007-09-30T06:05:40Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Ariesbase 0 1465 1668 2007-09-30T06:19:41Z Stevenlawrance 1 New page: During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security syste... wikitext text/x-wiki During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments. This system might not be in use anymore, especially as Ariesnet is now primarily a [http://en.wikipedia.org/wiki/Microsoft_.Net Microsoft .NET] shop. 63827123d5380e8b5f1766c5672ddfd072793998 Steven Lawrance 0 1409 1669 1655 2007-09-30T06:29:19Z Stevenlawrance 1 /* Software and project contributions */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://www.eclipse.org/ Eclipse], [http://en.wikipedia.org/wiki/Standard_Widget_Toolkit SWT], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/JNI JNI]||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years. I actively maintained this system with a colleague at the [http://www.sfdph.org/ San Francisco Department of Public Health] (DPH) [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/JNI JNI], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/IIS IIS], [http://en.wikipedia.org/wiki/Component_object_model COM]||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||69,015||2001-2005 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/Mysql MySQL]||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||[http://en.wikipedia.org/wiki/BASIC_Stamp Parallax BASIC Stamp], [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||[http://en.wikipedia.org/wiki/Php PHP], [http://en.wikipedia.org/wiki/Mysql MySQL], [http://en.wikipedia.org/wiki/Javascript JavaScript]|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com|| {{smn}}|| || |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind|| || || |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry|| || || |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || || |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || || |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to PHP 3.0.12 and PHP4 Beta2 so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers|| || ||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions|| || || |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant|| || || |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions|| || || |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 70c12fe2da980e58f9b18d8fc5c7ce05f559b569 1670 1669 2007-09-30T06:32:20Z Stevenlawrance 1 /* Software and project contributions */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://www.eclipse.org/ Eclipse], [http://en.wikipedia.org/wiki/Standard_Widget_Toolkit SWT], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/JNI JNI]||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years. I actively maintained this system with a colleague at the [http://www.sfdph.org/ San Francisco Department of Public Health] (DPH) [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/JNI JNI], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/IIS IIS], [http://en.wikipedia.org/wiki/Component_object_model COM]||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||69,015||2001-2005 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/Mysql MySQL]||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||[http://en.wikipedia.org/wiki/BASIC_Stamp Parallax BASIC Stamp], [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||[http://en.wikipedia.org/wiki/Php PHP], [http://en.wikipedia.org/wiki/Mysql MySQL], [http://en.wikipedia.org/wiki/Javascript JavaScript]|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com|| {{smn}}|| || |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind|| || || |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry|| || || |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || || |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || || |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to PHP 3.0.12 and PHP4 Beta2 so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers|| || ||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions|| || ||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant|| || ||1998 - 1999 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions|| || ||2007 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 7bf9b85f8e66deb2ba479ba8dc84ee0b16d368b0 1671 1670 2007-09-30T06:32:35Z Stevenlawrance 1 /* Software and project contributions */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://www.eclipse.org/ Eclipse], [http://en.wikipedia.org/wiki/Standard_Widget_Toolkit SWT], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/JNI JNI]||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years. I actively maintained this system with a colleague at the [http://www.sfdph.org/ San Francisco Department of Public Health] (DPH) [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/JNI JNI], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/IIS IIS], [http://en.wikipedia.org/wiki/Component_object_model COM]||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||69,015||2001-2005 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/Mysql MySQL]||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||[http://en.wikipedia.org/wiki/BASIC_Stamp Parallax BASIC Stamp], [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||[http://en.wikipedia.org/wiki/Php PHP], [http://en.wikipedia.org/wiki/Mysql MySQL], [http://en.wikipedia.org/wiki/Javascript JavaScript]|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com|| {{smn}}|| || |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind|| || || |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry|| || || |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || || |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || || |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to PHP 3.0.12 and PHP4 Beta2 so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers|| || ||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions|| || ||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant|| || ||1998-1999 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions|| || ||2007 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 8a317a9457d12bfc4a9a3cf577bda8f4aaeb3515 1672 1671 2007-09-30T07:02:55Z Stevenlawrance 1 /* Software and project contributions */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://www.eclipse.org/ Eclipse], [http://en.wikipedia.org/wiki/Standard_Widget_Toolkit SWT], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/JNI JNI]||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years. I actively maintained this system with a colleague at the [http://www.sfdph.org/ San Francisco Department of Public Health] (DPH) [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/JNI JNI], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/IIS IIS], [http://en.wikipedia.org/wiki/Component_object_model COM]||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||69,015||2001-2005 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/Mysql MySQL]||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||[http://en.wikipedia.org/wiki/BASIC_Stamp Parallax BASIC Stamp], [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||[http://en.wikipedia.org/wiki/Php PHP], [http://en.wikipedia.org/wiki/Mysql MySQL], [http://en.wikipedia.org/wiki/Javascript JavaScript]|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com|| {{smn}}|| || |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind|| || || |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry|| || || |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || || |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || || |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||[http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://www.net-snmp.org/ Net-SNMP]||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||[http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/Glib GLib threads], [http://en.wikipedia.org/wiki/GTK%2B GTK+]||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant||[http://en.wikipedia.org/wiki/Html HTML], [http://en.wikipedia.org/wiki/Javascript JavaScript]|| ||1998-1999 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||confidential|| ||2007 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 9daf62b57c66085c5213e1c1786de2bc54abb570 1675 1672 2007-09-30T13:49:38Z Stevenlawrance 1 /* Software Project Experience */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://www.eclipse.org/ Eclipse], [http://en.wikipedia.org/wiki/Standard_Widget_Toolkit SWT], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/JNI JNI]||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years. I actively maintained this system with a colleague at the [http://www.sfdph.org/ San Francisco Department of Public Health] (DPH) [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/JNI JNI], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/IIS IIS], [http://en.wikipedia.org/wiki/Component_object_model COM]||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||confidential|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/Mysql MySQL]||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||[http://en.wikipedia.org/wiki/BASIC_Stamp Parallax BASIC Stamp], [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||[http://en.wikipedia.org/wiki/Php PHP], [http://en.wikipedia.org/wiki/Mysql MySQL], [http://en.wikipedia.org/wiki/Javascript JavaScript]|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com|| {{smn}}|| || |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind|| || || |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry|| || || |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || || |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || || |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||[http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://www.net-snmp.org/ Net-SNMP]||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||[http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/Glib GLib threads], [http://en.wikipedia.org/wiki/GTK%2B GTK+]||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the DirList project was started originally as a web directory for Bryant||[http://en.wikipedia.org/wiki/Html HTML], [http://en.wikipedia.org/wiki/Javascript JavaScript]|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 61110f5373cf19d2ff384a8207183ce430e139c4 1676 1675 2007-09-30T13:51:07Z Stevenlawrance 1 /* Software and project contributions */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://www.eclipse.org/ Eclipse], [http://en.wikipedia.org/wiki/Standard_Widget_Toolkit SWT], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/JNI JNI]||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years. I actively maintained this system with a colleague at the [http://www.sfdph.org/ San Francisco Department of Public Health] (DPH) [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/JNI JNI], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/IIS IIS], [http://en.wikipedia.org/wiki/Component_object_model COM]||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||confidential|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/Mysql MySQL]||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||[http://en.wikipedia.org/wiki/BASIC_Stamp Parallax BASIC Stamp], [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||[http://en.wikipedia.org/wiki/Php PHP], [http://en.wikipedia.org/wiki/Mysql MySQL], [http://en.wikipedia.org/wiki/Javascript JavaScript]|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com|| {{smn}}|| || |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind|| || || |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry|| || || |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || || |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || || |- |[http://dirlist.sourceforge.net/ DirList2]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||[http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://www.net-snmp.org/ Net-SNMP]||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||[http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/Glib GLib threads], [http://en.wikipedia.org/wiki/GTK%2B GTK+]||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||[http://en.wikipedia.org/wiki/Html HTML], [http://en.wikipedia.org/wiki/Javascript JavaScript]|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 8f885799701af825298e59abc1a94cde4672cc8e 1677 1676 2007-09-30T13:52:08Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://www.eclipse.org/ Eclipse], [http://en.wikipedia.org/wiki/Standard_Widget_Toolkit SWT], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/JNI JNI]||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years. I actively maintained this system with a colleague at the [http://www.sfdph.org/ San Francisco Department of Public Health] (DPH) [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/JNI JNI], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/IIS IIS], [http://en.wikipedia.org/wiki/Component_object_model COM]||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||confidential|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/Mysql MySQL]||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||[http://en.wikipedia.org/wiki/BASIC_Stamp Parallax BASIC Stamp], [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||[http://en.wikipedia.org/wiki/Php PHP], [http://en.wikipedia.org/wiki/Mysql MySQL], [http://en.wikipedia.org/wiki/Javascript JavaScript]|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com|| {{smn}}|| || |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind|| || || |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry|| || || |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || || |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || || |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||[http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://www.net-snmp.org/ Net-SNMP]||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||[http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/Glib GLib threads], [http://en.wikipedia.org/wiki/GTK%2B GTK+]||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||[http://en.wikipedia.org/wiki/Html HTML], [http://en.wikipedia.org/wiki/Javascript JavaScript]|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 5ad1b9f6407cb68070fcb21027d41adaba30fda5 1682 1677 2007-09-30T14:55:43Z Stevenlawrance 1 /* Team software */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://www.eclipse.org/ Eclipse], [http://en.wikipedia.org/wiki/Standard_Widget_Toolkit SWT], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/JNI JNI]||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/JNI JNI], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/IIS IIS], [http://en.wikipedia.org/wiki/Component_object_model COM]||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||confidential|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/Mysql MySQL]||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||[http://en.wikipedia.org/wiki/BASIC_Stamp Parallax BASIC Stamp], [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||[http://en.wikipedia.org/wiki/Php PHP], [http://en.wikipedia.org/wiki/Mysql MySQL], [http://en.wikipedia.org/wiki/Javascript JavaScript]|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com|| {{smn}}|| || |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind|| || || |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry|| || || |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || || |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || || |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||[http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://www.net-snmp.org/ Net-SNMP]||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||[http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/Glib GLib threads], [http://en.wikipedia.org/wiki/GTK%2B GTK+]||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||[http://en.wikipedia.org/wiki/Html HTML], [http://en.wikipedia.org/wiki/Javascript JavaScript]|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] a9cf05110a3f80a5eb36cae70c8f7301ae4892ab 1683 1682 2007-09-30T14:57:37Z Stevenlawrance 1 /* Team software */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://www.eclipse.org/ Eclipse], [http://en.wikipedia.org/wiki/Standard_Widget_Toolkit SWT], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/JNI JNI]||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/JNI JNI], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/IIS IIS], [http://en.wikipedia.org/wiki/Component_object_model COM]||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||confidential|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/Mysql MySQL]||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||[http://en.wikipedia.org/wiki/BASIC_Stamp Parallax BASIC Stamp], [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||[http://en.wikipedia.org/wiki/Php PHP], [http://en.wikipedia.org/wiki/Mysql MySQL], [http://en.wikipedia.org/wiki/Javascript JavaScript]|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com|| {{smn}}|| || |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind|| || || |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry|| || || |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || || |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || || |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||[http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://www.net-snmp.org/ Net-SNMP]||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||[http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/Glib GLib threads], [http://en.wikipedia.org/wiki/GTK%2B GTK+]||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||[http://en.wikipedia.org/wiki/Html HTML], [http://en.wikipedia.org/wiki/Javascript JavaScript]|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] e1cf1c19979a1f0cc47f542687ac685b4e17a693 1684 1683 2007-09-30T15:09:57Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://www.eclipse.org/ Eclipse], [http://en.wikipedia.org/wiki/Standard_Widget_Toolkit SWT], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/JNI JNI]||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/JNI JNI], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/IIS IIS], [http://en.wikipedia.org/wiki/Component_object_model COM]||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||confidential|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/Mysql MySQL]||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||[http://en.wikipedia.org/wiki/BASIC_Stamp Parallax BASIC Stamp], [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||[http://en.wikipedia.org/wiki/Php PHP], [http://en.wikipedia.org/wiki/Mysql MySQL], [http://en.wikipedia.org/wiki/Javascript JavaScript]|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com|| || || |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind|| || || |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry|| || || |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || || |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || || |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||[http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://www.net-snmp.org/ Net-SNMP]||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||[http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/Glib GLib threads], [http://en.wikipedia.org/wiki/GTK%2B GTK+]||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||[http://en.wikipedia.org/wiki/Html HTML], [http://en.wikipedia.org/wiki/Javascript JavaScript]|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 7923434fad7aa66011a6afc30c64ab52e2d04070 1685 1684 2007-09-30T15:13:31Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://www.eclipse.org/ Eclipse], [http://en.wikipedia.org/wiki/Standard_Widget_Toolkit SWT], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/JNI JNI]||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/JNI JNI], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/IIS IIS], [http://en.wikipedia.org/wiki/Component_object_model COM]||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||confidential|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/Mysql MySQL]||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||[http://en.wikipedia.org/wiki/BASIC_Stamp Parallax BASIC Stamp], [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||[http://en.wikipedia.org/wiki/Php PHP], [http://en.wikipedia.org/wiki/Mysql MySQL], [http://en.wikipedia.org/wiki/Javascript JavaScript]|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com|| || || |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/JNI JNI], [http://danadler.com/jacob/ JACOB], [http://en.wikipedia.org/wiki/Component_object_model COM], [http://en.wikipedia.org/wiki/Win32 Win32]||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry|| || || |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || || |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || || |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||[http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://www.net-snmp.org/ Net-SNMP]||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||[http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/Glib GLib threads], [http://en.wikipedia.org/wiki/GTK%2B GTK+]||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||[http://en.wikipedia.org/wiki/Html HTML], [http://en.wikipedia.org/wiki/Javascript JavaScript]|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 59f59785ddd13bb7ec65ac1fb333b9e197183e3e 1686 1685 2007-09-30T15:14:21Z Stevenlawrance 1 /* Team software */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://www.eclipse.org/ Eclipse], [http://en.wikipedia.org/wiki/Standard_Widget_Toolkit SWT], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/JNI JNI], [http://en.wikipedia.org/wiki/Win32 Win32]||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/JNI JNI], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/IIS IIS], [http://en.wikipedia.org/wiki/Component_object_model COM], [http://en.wikipedia.org/wiki/Win32 Win32]||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||confidential|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/Mysql MySQL]||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||[http://en.wikipedia.org/wiki/BASIC_Stamp Parallax BASIC Stamp], [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/Xpcom XPCOM], [http://en.wikipedia.org/wiki/Win32 Win32]||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||[http://en.wikipedia.org/wiki/Php PHP], [http://en.wikipedia.org/wiki/Mysql MySQL], [http://en.wikipedia.org/wiki/Javascript JavaScript]|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com|| || || |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/JNI JNI], [http://danadler.com/jacob/ JACOB], [http://en.wikipedia.org/wiki/Component_object_model COM], [http://en.wikipedia.org/wiki/Win32 Win32]||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry|| || || |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || || |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || || |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||[http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://www.net-snmp.org/ Net-SNMP]||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||[http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/Glib GLib threads], [http://en.wikipedia.org/wiki/GTK%2B GTK+]||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||[http://en.wikipedia.org/wiki/Html HTML], [http://en.wikipedia.org/wiki/Javascript JavaScript]|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] b008e62c4ddb98881ad3aa065284b67bc99a987f 1687 1686 2007-09-30T15:15:09Z Stevenlawrance 1 /* Team software */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://www.eclipse.org/ Eclipse], [http://en.wikipedia.org/wiki/Unified_Modeling_Language UML], [http://en.wikipedia.org/wiki/Standard_Widget_Toolkit SWT], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/JNI JNI], [http://en.wikipedia.org/wiki/Win32 Win32]||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/JNI JNI], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/IIS IIS], [http://en.wikipedia.org/wiki/Component_object_model COM], [http://en.wikipedia.org/wiki/Win32 Win32]||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||confidential|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/Mysql MySQL]||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||[http://en.wikipedia.org/wiki/BASIC_Stamp Parallax BASIC Stamp], [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/Xpcom XPCOM], [http://en.wikipedia.org/wiki/Win32 Win32]||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||[http://en.wikipedia.org/wiki/Php PHP], [http://en.wikipedia.org/wiki/Mysql MySQL], [http://en.wikipedia.org/wiki/Javascript JavaScript]|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com|| || || |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/JNI JNI], [http://danadler.com/jacob/ JACOB], [http://en.wikipedia.org/wiki/Component_object_model COM], [http://en.wikipedia.org/wiki/Win32 Win32]||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry|| || || |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || || |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || || |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||[http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://www.net-snmp.org/ Net-SNMP]||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||[http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/Glib GLib threads], [http://en.wikipedia.org/wiki/GTK%2B GTK+]||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||[http://en.wikipedia.org/wiki/Html HTML], [http://en.wikipedia.org/wiki/Javascript JavaScript]|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 55f306018db5e12a218004edb528f2a5fd9a8d91 1692 1687 2007-09-30T15:25:14Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://www.eclipse.org/ Eclipse], [http://en.wikipedia.org/wiki/Unified_Modeling_Language UML], [http://en.wikipedia.org/wiki/Standard_Widget_Toolkit SWT], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/JNI JNI], [http://en.wikipedia.org/wiki/Win32 Win32]||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/JNI JNI], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/IIS IIS], [http://en.wikipedia.org/wiki/Component_object_model COM], [http://en.wikipedia.org/wiki/Win32 Win32]||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||[http://en.wikipedia.org/wiki/Vbscript VBScript], [http://en.wikipedia.org/wiki/Transact-SQL T-SQL], [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||confidential|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/Mysql MySQL]||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||[http://en.wikipedia.org/wiki/BASIC_Stamp Parallax BASIC Stamp], [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/Xpcom XPCOM], [http://en.wikipedia.org/wiki/Win32 Win32]||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||[http://en.wikipedia.org/wiki/Php PHP], [http://en.wikipedia.org/wiki/Mysql MySQL], [http://en.wikipedia.org/wiki/Javascript JavaScript]|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction|| ||5,411|| |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||[http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], [http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/JNI JNI], [http://danadler.com/jacob/ JACOB], [http://en.wikipedia.org/wiki/Component_object_model COM], {{Tech:Win32}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||[http://en.wikipedia.org/wiki/Browser_helper_object BHO], [http://en.wikipedia.org/wiki/C%2B%2B C++], [http://en.wikipedia.org/wiki/Component_object_model COM], [http://en.wikipedia.org/wiki/Win32 Win32]||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || || |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || || |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||[http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://www.net-snmp.org/ Net-SNMP]||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||[http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/Glib GLib threads], [http://en.wikipedia.org/wiki/GTK%2B GTK+]||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||[http://en.wikipedia.org/wiki/Html HTML], [http://en.wikipedia.org/wiki/Javascript JavaScript]|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 6ee7ef75bb95ebfac7b97644dd7eaa27cd7d666f 1701 1692 2007-09-30T15:30:26Z Stevenlawrance 1 /* Software Project Experience */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/C_%28programming_language%29 C], {{Tech:JNI}}, [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/IIS IIS], [http://en.wikipedia.org/wiki/Component_object_model COM], {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server], [http://en.wikipedia.org/wiki/Javascript JavaScript], [http://httpd.apache.org/ Apache HTTP Server], [http://en.wikipedia.org/wiki/IIS IIS]||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||confidential|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, [http://en.wikipedia.org/wiki/Corba CORBA], [http://en.wikipedia.org/wiki/Mysql MySQL]||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||[http://en.wikipedia.org/wiki/Javascript JavaScript], {{Tech:Java}}, [http://en.wikipedia.org/wiki/Xul XUL], [http://en.wikipedia.org/wiki/Xpcom XPCOM]||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||[http://en.wikipedia.org/wiki/BASIC_Stamp Parallax BASIC Stamp], [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot]||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||[http://en.wikipedia.org/wiki/Javascript JavaScript], [http://en.wikipedia.org/wiki/Xul XUL], {{Tech:C++}}, [http://en.wikipedia.org/wiki/Xpcom XPCOM], {{Tech:Win32}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||[http://en.wikipedia.org/wiki/Php PHP], [http://en.wikipedia.org/wiki/Mysql MySQL], [http://en.wikipedia.org/wiki/Javascript JavaScript]|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction|| ||5,411|| |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, [http://en.wikipedia.org/wiki/C_%28programming_language%29 C], {{Tech:JNI}}, [http://danadler.com/jacob/ JACOB], [http://en.wikipedia.org/wiki/Component_object_model COM], {{Tech:Win32}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||[http://en.wikipedia.org/wiki/Browser_helper_object BHO], {{Tech:C++}}, [http://en.wikipedia.org/wiki/Component_object_model COM], {{Tech:Win32}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || || |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || || |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||[http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://www.net-snmp.org/ Net-SNMP]||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||[http://en.wikipedia.org/wiki/C_%28programming_language%29 C], [http://en.wikipedia.org/wiki/Glib GLib threads], [http://en.wikipedia.org/wiki/GTK%2B GTK+]||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||[http://en.wikipedia.org/wiki/Html HTML], [http://en.wikipedia.org/wiki/Javascript JavaScript]|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 28e02fe6bd912315f79885feaefd6dc28ef56865 File:Aidshotline.png 6 1466 1673 2007-09-30T07:08:45Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 SFAF CRM 0 1458 1674 1649 2007-09-30T07:10:18Z Stevenlawrance 1 wikitext text/x-wiki The [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Customer_relationship_management customer relationship management (CRM)] primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]. SFAF CRM was implemented as [http://en.wikipedia.org/wiki/Active_Server_Pages Microsoft classic VBScript ASP pages], though it likely has evolved since I left the SFAF to get a software engineering degree at Carnegie Mellon University. The screen shot below shows what the Internet-facing user interface of the SFAF's CRM system looks like, which is [http://www.aidshotline.org/ aidshotline.org] {|border="1" |[[Image:Aidshotline.png]] |} 9e3cca62c1d5ea66f5f50ad0be25af8a11c36fd7 Template:Tech:Win32 10 1467 1688 2007-09-30T15:23:35Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Win32 Win32] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Win32 Win32] bcb0960c8d7d2691bf4594793cdf40b716c40f34 1689 1688 2007-09-30T15:24:26Z Stevenlawrance 1 [[Tech:Win32]] moved to [[Template:Tech:Win32]]: Forgot to make this a template wikitext text/x-wiki [http://en.wikipedia.org/wiki/Win32 Win32] bcb0960c8d7d2691bf4594793cdf40b716c40f34 Tech:Win32 0 1468 1690 2007-09-30T15:24:26Z Stevenlawrance 1 [[Tech:Win32]] moved to [[Template:Tech:Win32]]: Forgot to make this a template wikitext text/x-wiki #REDIRECT [[Template:Tech:Win32]] 057012ae8a580a0e2d3aaf2fa11bcfeb0d25b3ec Template:Tech:Java 10 1469 1691 2007-09-30T15:25:04Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java] 2b16ee7203022b77bdf20a081d4c3c33eab91bff Template:Tech:UML 10 1470 1693 2007-09-30T15:26:30Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Unified_Modeling_Language UML] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Unified_Modeling_Language UML] 07a3f1df7085f7b52cc271b347099e27d76899d4 Template:Tech:Eclipse 10 1471 1694 2007-09-30T15:26:49Z Stevenlawrance 1 New page: [http://www.eclipse.org/ Eclipse] wikitext text/x-wiki [http://www.eclipse.org/ Eclipse] 9632ff917b3fe8406aee010c9a2fdb4130389101 Template:Tech:SWT 10 1472 1695 2007-09-30T15:27:17Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Standard_Widget_Toolkit SWT] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Standard_Widget_Toolkit SWT] 224b6c41b24e229ea2bc8c85cd64592275b2729a Template:Tech:C++ 10 1473 1696 2007-09-30T15:27:39Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/C%2B%2B C++] wikitext text/x-wiki [http://en.wikipedia.org/wiki/C%2B%2B C++] 816fdf4da0647e4798c6fa7ae65d2aa87599e598 Template:Tech:JNI 10 1474 1697 2007-09-30T15:28:08Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/JNI JNI] wikitext text/x-wiki [http://en.wikipedia.org/wiki/JNI JNI] 86ad3697ba24ffc2ac856fc65b963935bb596500 Template:Tech:VBScript 10 1475 1698 2007-09-30T15:28:56Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Vbscript VBScript] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Vbscript VBScript] baa50e7e082097d4b81ce28827ec683528c71283 Template:Tech:Swing 10 1476 1699 2007-09-30T15:29:21Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing] 068079e31ba26003adf9fbe72e4a398f29ce3a4e Template:Tech:T-SQL 10 1477 1700 2007-09-30T15:29:43Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Transact-SQL T-SQL] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Transact-SQL T-SQL] 93a1e95f0c971bcd78ab5075719b6bba674dd5fb Template:Tech:MS SQL Server 10 1478 1702 2007-09-30T15:30:55Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Microsoft_SQL_Server MS SQL Server] 106049a9ae791ee0f8d3569b854196e2ef9cd619 Template:Tech:JavaScript 10 1479 1703 2007-09-30T15:31:20Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Javascript JavaScript] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Javascript JavaScript] b56af3053a6b2a8cdff8625084f8eb3cb1b77ab6 Template:Tech:C 10 1480 1704 2007-09-30T15:32:05Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/C_%28programming_language%29 C] wikitext text/x-wiki [http://en.wikipedia.org/wiki/C_%28programming_language%29 C] da78f957a638e8e42b453f3377e5cf43a73311bd Template:Tech:CORBA 10 1481 1705 2007-09-30T15:32:25Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Corba CORBA] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Corba CORBA] ee26073b08055660ff4279bb5e14c72f2ad45ef3 Template:Tech:IIS 10 1482 1706 2007-09-30T15:32:47Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/IIS IIS] wikitext text/x-wiki [http://en.wikipedia.org/wiki/IIS IIS] 2775d6702ea54ef1ca3fe20add2566843ae9f831 Template:Tech:COM 10 1483 1707 2007-09-30T15:33:06Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Component_object_model COM] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Component_object_model COM] 38adb5a9d1bc746b8514db40813dd2be7903f65d Template:Tech:Apache 10 1484 1708 2007-09-30T15:33:40Z Stevenlawrance 1 New page: [http://httpd.apache.org/ Apache HTTP Server] wikitext text/x-wiki [http://httpd.apache.org/ Apache HTTP Server] d444468712d3a4620a894a9d01881bf6f123243a Template:Tech:MySQL 10 1485 1709 2007-09-30T15:34:13Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Mysql MySQL] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Mysql MySQL] 0a4962c72c6dd3c4d6f04f65cc68777c63dd3f47 Template:Tech:XUL 10 1486 1710 2007-09-30T15:34:39Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Xul XUL] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Xul XUL] 7bc543a1c90c4e7ad88932dacdb7b7c2962b8727 Template:Tech:XPCOM 10 1487 1711 2007-09-30T15:35:04Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Xpcom XPCOM] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Xpcom XPCOM] 4bcb696e6c0a86cd2b9bad57e22ccd2f72ff3e20 Template:Tech:PHP 10 1488 1712 2007-09-30T15:35:33Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Php PHP] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Php PHP] 796e51731e81e5671788a3239b1129374dc031c8 Template:Tech:BASIC Stamp 10 1489 1713 2007-09-30T15:36:01Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/BASIC_Stamp Parallax BASIC Stamp] wikitext text/x-wiki [http://en.wikipedia.org/wiki/BASIC_Stamp Parallax BASIC Stamp] 08a9a2503b74178e4c11dfa13fb9726c5e46e4b1 Template:Tech:Boe-Bot 10 1490 1714 2007-09-30T15:36:26Z Stevenlawrance 1 New page: [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot] wikitext text/x-wiki [http://www.parallax.com/html_pages/robotics/boebot/boebot.asp Parallax Boe-Bot] 5917adb5064cd2e7f8411f169b93f30d370aa7dd Template:Tech:JACOB 10 1491 1715 2007-09-30T15:36:50Z Stevenlawrance 1 New page: [http://danadler.com/jacob/ JACOB] wikitext text/x-wiki [http://danadler.com/jacob/ JACOB] 24376d2288971c02baaf55d03967dd50f9464ea4 Template:Tech:BHO 10 1492 1716 2007-09-30T15:37:26Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Browser_helper_object BHO] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Browser_helper_object BHO] 729e1bb44f3770e6f5eb1c266186bc7faf780d10 Template:Tech:Net-SNMP 10 1493 1717 2007-09-30T15:38:09Z Stevenlawrance 1 New page: [http://www.net-snmp.org/ Net-SNMP] wikitext text/x-wiki [http://www.net-snmp.org/ Net-SNMP] 28686a5a936e85c8691482706b1c8d14522fa069 Template:Tech:GLib 10 1494 1718 2007-09-30T15:38:47Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Glib GLib] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Glib GLib] 689234ceed02605097249121a1e6a5b69f22726e Template:Tech:GTK+ 10 1495 1719 2007-09-30T15:39:10Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/GTK%2B GTK+] wikitext text/x-wiki [http://en.wikipedia.org/wiki/GTK%2B GTK+] 0e4a3f9cb78ccb2bc74e97e12a683dd29fd7ae5f Template:Tech:HTML 10 1496 1720 2007-09-30T15:39:33Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Html HTML] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Html HTML] a61f5d868ffc68b23626f5623047e1b30142fe2a Steven Lawrance 0 1409 1721 1701 2007-09-30T15:40:00Z Stevenlawrance 1 /* Software Project Experience */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||confidential|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:BASIC Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:BASIC Boe-Bot}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction|| ||5,411|| |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || || |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || || |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:HTML}}, {{Tech:JavaScript}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] e6304fff5b151807845466ce7bc84a6b1d2cd8d5 1722 1721 2007-09-30T15:40:49Z Stevenlawrance 1 /* Team software */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||confidential|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction|| ||5,411|| |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || || |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || || |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:HTML}}, {{Tech:JavaScript}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 1c08918a00b6aa9ec609355be4eaacca754e9e0b 1723 1722 2007-09-30T15:42:22Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||confidential|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || || |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || || |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:HTML}}, {{Tech:JavaScript}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 43774a8225191401f653c13eb68fa9cac660487b 1724 1723 2007-09-30T15:59:11Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||confidential|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || || |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}||10,339||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || || |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:HTML}}, {{Tech:JavaScript}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 3cb23c2e9ded5a6003c1bf60c6cac6340b2a7274 1725 1724 2007-09-30T16:01:30Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||confidential|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || || |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || || |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:HTML}}, {{Tech:JavaScript}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 78a1519280e349f193f2cf78566b4e5748ae2c74 1732 1725 2007-09-30T16:42:39Z Stevenlawrance 1 /* Team software */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || || |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || || |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:HTML}}, {{Tech:JavaScript}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] e1a9d58a27d15b0e4bbab437b6f05281408c0595 1737 1732 2007-09-30T16:47:06Z Stevenlawrance 1 /* Team software */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || || |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || || |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:HTML}}, {{Tech:JavaScript}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] ebccb8e8ad2f36b8dd448707863b7bd9f241ea7d 1738 1737 2007-09-30T16:48:43Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || || |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || || |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:HTML}}, {{Tech:JavaScript}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 800d63016a2dc1e599110f53e5d06e798ba76b32 1739 1738 2007-09-30T16:49:16Z Stevenlawrance 1 /* Software and project contributions */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || || |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || || |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:HTML}}, {{Tech:JavaScript}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] a506bc174570fc06f6ecbbb633fbbecf344b70a4 1740 1739 2007-09-30T16:50:10Z Stevenlawrance 1 /* Software and project contributions */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || || |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || || |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] ffe12090381eece3a8b127c39c007e22386ea4e7 1741 1740 2007-09-30T16:59:58Z Stevenlawrance 1 /* Software and project contributions */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki. This notice will go away by 2007-09-30'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || || |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || || |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 45a4482474c72acc932b3f76197ab510ba851694 1742 1741 2007-10-01T07:05:46Z Stevenlawrance 1 wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-07'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || || |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || || |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 661ee66be9a2428a211a27006503b1b83eef6038 1743 1742 2007-10-02T05:59:37Z Stevenlawrance 1 /* Team software */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-07'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || || |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || || |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for [http://www.salesforce.com/appexchange/ AppExchange] package security **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 36083aac2eeba72d758edcd687b744f0f9dc346e 1744 1743 2007-10-02T05:59:53Z Stevenlawrance 1 /* [http://www.salesforce.com/ Salesforce.com] */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-07'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage|| || || |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface|| || || |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel|| || || |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file|| || || |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system|| || || |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server|| || || |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list|| || || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans|| || || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems|| || || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information|| || || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed|| || || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail|| || || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on|| || || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server|| || || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk|| || || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School|| || || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes|| || || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98|| || || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype|| || || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun|| || || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays|| || || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments|| || || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular|| || || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts|| || || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily|| || || |- |[[Horses]]||A fun horse racing game that I made a long time ago|| || || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP|| || || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking|| || || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)|| || || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own|| || || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago|| || || |- |[[AriesType]]||A typing program that I made while a freshman at Grapevine Junior High School (the 9th grade was in a separate school from the high school. That building is now Cross-Timbers Middle School, and grades 9-12 attend the high schools now)|| || || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)|| || || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS|| || || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school|| || || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)|| || || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant|| || || |- |[[SLOS Modem]]||File transfer utility for SLOS and DOS|| || || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces|| || || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] a9e911ca637f9de56fb1cc828d9b843288c9efd2 1748 1744 2007-10-04T05:38:56Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-07'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}|| || |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}|| || |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}|| || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}|| || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}|| || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}|| || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}|| || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}{{Tech:Win32}}|| || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}|| || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk||{{Tech:C}}, {{Tech:Win32}}|| || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}|| || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}|| || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{Tech:C++}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C}}, {{Tech:Win32}}|| || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[Horses]]||A fun horse racing game that I made a long time ago||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}|| || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:Win16}}, {{Tech:Win32}}|| || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}|| || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)||{{Tech:C}}, {{Tech:DOS}}, {{Tech:XMS}}|| || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)||{{Tech:BASIC}}, {{Tech:DOS}}|| || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}|| || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces||{{Tech:Java}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 2d2dd131cd1024dbabaa73096ab100c02d95c4e7 Template:Tech:Ant 10 1497 1726 2007-09-30T16:38:44Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Apache_Ant Apache Ant] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Apache_Ant Apache Ant] ef30312895d20a06a3e2602aaf34d400d733217e Template:Tech:Bugzilla 10 1498 1727 2007-09-30T16:39:01Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Bugzilla Bugzilla] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Bugzilla Bugzilla] 98037291e6bda6161fc4c15c3f98e37ab7cacec5 Template:Tech:CruiseControl 10 1499 1728 2007-09-30T16:39:23Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/CruiseControl CruiseControl] wikitext text/x-wiki [http://en.wikipedia.org/wiki/CruiseControl CruiseControl] 9d6b3af80149b55be9f72f366126881f2f219dd2 Template:Tech:MediaWiki 10 1500 1729 2007-09-30T16:39:46Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Mediawiki MediaWiki] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Mediawiki MediaWiki] 48513df60177c251a6d0b0a45d3863ef9fe0e4b1 Template:Tech:Subversion 10 1501 1730 2007-09-30T16:40:31Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Subversion_%28software%29 Subversion] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Subversion_%28software%29 Subversion] ac48b1de6b16726b113da71d6928e1c9e83a885b Template:Tech:CVS 10 1502 1731 2007-09-30T16:42:28Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] c286c217fdf40db80b1e1f2b2f78cd616556c773 Template:Tech:JUnit 10 1503 1733 2007-09-30T16:43:43Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Junit JUnit] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Junit JUnit] aaa7eafc7f87fc22312fb5a4e01d3b5a4396a74e Template:Tech:NUnit 10 1504 1734 2007-09-30T16:44:39Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Nunit NUnit] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Nunit NUnit] 2fc05b3054491860119861e9b02216719009121f Template:Tech:C Sharp 10 1505 1735 2007-09-30T16:45:54Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/C_sharp C#] wikitext text/x-wiki [http://en.wikipedia.org/wiki/C_sharp C#] 02debe33687d296f9dc1818a0d272055cf78657c Template:Tech:Mono 10 1506 1736 2007-09-30T16:46:20Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Mono_%28software%29 Mono] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Mono_%28software%29 Mono] 1e097da85598b776fa9f0cd32e4d0458334ff731 Henry Lamb 0 1407 1745 1423 2007-10-04T04:02:01Z Stevenlawrance 1 wikitext text/x-wiki '''Email:''' [mailto:henry.lamb@gmail.com henry.lamb@gmail.com] ==Objective== To apply developed customer relations, managerial and accounting skills as a Restaurant Manager with possibilities for long term growth. ==Summary of Skills== *NRA (National Restaurant Association) certification in Safety, Sanitation and Nutrition. *NRA (National Restaurant Association) certification in Hospitality Law. *Exceptional organizational and planning skills; adaptable; enjoy new challenges. *Strong knowledge of Account Receivable and Account Payable as well as P.O.S. systems. *Thorough knowledge of MS Word, Excel, PowerPoint and graphic design programs. ==Education== ===California Culinary Academy=== *San Francisco, CA *'''Associate of Occupational Studies Degree''' *'''Le Cordon Bleu''' *Honors Graduate in CULINARY ARTS: January 30, 2004 *Honors Graduate in HOSPITALITY & RESTAURANT MANAGEMENT: January 14, 2005 ===City College of San Francisco=== *San Francisco, CA *'''Beginning and Conversational Spanish''' *July ’06 to present ==Professional Academic Development== *Beverage Operation Services – Covered basics of bar operations, focusing on all aspects of beverage service including opening and closing procedures, proper service techniques, legal and ethical issues and bar cost percentages. *Small Business Management – Researched areas of marketing, accounting, legal aspects of business operations, motivational techniques, licenses and permits, organizational and leadership skills and operating a franchise. *Hotel Operations – Procedures for operating a hotel front desk, house keeping department, food and beverage outlets, concessions and management techniques for integrating these departments. ==Practical Experience== *Catering & Banquets Operations – Plan, organize and manage the food and beverage services of organizations and businesses both inside and outside the hospitality industry with the aim of achieving good quality at low costs with high standards of hygiene and customer satisfaction. *Cyril’s Restaurant – Trained in all classical cooking techniques of the hot kitchen: sautéing, roasting, steaming, poaching, braising and grilling. *The Caréme Room – Assisted in the planning and preparation of cold and hot buffets, banquets and dinner service open to the public. *Project Open Hand – Preparation and packaging of freshly cooked meals for San Francisco’s largest food provider on a daily basis. ==Experience== ===Catch Seafood Restaurant=== *San Francisco, CA *02/07 – present *'''Restaurant Manager''' *Opened and closed restaurant, and make daily deposits. *Through understanding of P&L (Profit & Loss) statement. *Handled Account Payable and Receivable, organized and input all invoices. *Worked with most P.O.S. systems (Micros, Aloha and Squirrel). *Accurately handle and estimate table turns using OPENTABLE. *Managed and input monthly inventories. ===Dante’s Seafood Grill, Pier 39=== *San Francisco, CA *03/05 – 07/06 *'''Assistant Manager''' *Opened and closed restaurant. *Supervised and motivate Front of House Staff on a daily bases. *Interviewed, scheduled, pay-role and handled administrative functions. ===W Hotel=== *San Francisco, CA *11/04 – 03/05 *'''XYZ Restaurant, Management Internship''' *Completed a comprehensive Management Internship program focused on daily operations. *Experience includes working with Local 2 employees. *Managed invoice control, employee time management and daily administrative functions. ===The Tavern Grill=== *San Francisco, CA *10/03 – 03/05 *'''Head Server/Banquet Server''' *Responsible for opening and closing the dining room. *Knowledge of Aloha & Micros POS (Point of Sales) systems. *Outstanding guest service in fine dining atmosphere with thorough knowledge of service timing. ===JPMorgan Chase & Co.=== *San Francisco, CA *01/00 – 09/03 *'''Graphic/Multimedia Designer''' *Effectively organized time and worked to consistently meet critical deadlines. *Created and edited short animation sequences for use in company pitches. *Produced camera-ready art utilizing Apple and Windows computer systems with laser printing equipment. ===Wit SoundView=== *San Francisco, CA *07/99 – 01/01 *'''Project Manager/Technical Publication''' *Coordinated production of all printed collateral. *Recommended and worked with sales and print representatives on a daily basis. *Supervised and maintained a staff of 15 designers. 4723673ed338dabd7f46bfc5bd3a4fec31dcbe40 1747 1745 2007-10-04T04:15:11Z Henrylamb 2 wikitext text/x-wiki '''Email:''' [mailto:henry.lamb@gmail.com henry.lamb@gmail.com] ==Objective== To apply developed customer relations, managerial and accounting skills as a Restaurant Manager with possibilities for long term growth. ==Summary of Skills== *NRA (National Restaurant Association) certification in Safety, Sanitation and Nutrition. *NRA (National Restaurant Association) certification in Hospitality Law. *Exceptional organizational and planning skills; adaptable; enjoy new challenges. *Strong knowledge of Account Receivable and Account Payable as well as P.O.S. systems. *Thorough knowledge of MS Word, Excel, PowerPoint and graphic design programs. ==Education== ===California Culinary Academy=== *San Francisco, CA *'''Associate of Occupational Studies Degree''' *'''Le Cordon Bleu''' *Honors Graduate in CULINARY ARTS: January 30, 2004 *Honors Graduate in HOSPITALITY & RESTAURANT MANAGEMENT: January 14, 2005 ===City College of San Francisco=== *San Francisco, CA *'''Beginning and Conversational Spanish''' *July ’06 to present ==Professional Academic Development== *Beverage Operation Services – Covered basics of bar operations, focusing on all aspects of beverage service including opening and closing procedures, proper service techniques, legal and ethical issues and bar cost percentages. *Small Business Management – Researched areas of marketing, accounting, legal aspects of business operations, motivational techniques, licenses and permits, organizational and leadership skills and operating a franchise. *Hotel Operations – Procedures for operating a hotel front desk, house keeping department, food and beverage outlets, concessions and management techniques for integrating these departments. ==Practical Experience== *Catering & Banquets Operations – Plan, organize and manage the food and beverage services of organizations and businesses both inside and outside the hospitality industry with the aim of achieving good quality at low costs with high standards of hygiene and customer satisfaction. *Cyril’s Restaurant – Trained in all classical cooking techniques of the hot kitchen: sautéing, roasting, steaming, poaching, braising and grilling. *The Caréme Room – Assisted in the planning and preparation of cold and hot buffets, banquets and dinner service open to the public. *Project Open Hand – Preparation and packaging of freshly cooked meals for San Francisco’s largest food provider on a daily basis. ==Experience== ===Catch Seafood Restaurant=== *San Francisco, CA *02/07 – present *'''Restaurant Manager''' *Opened and closed restaurant, and make daily deposits. *Through understanding of P&L (Profit & Loss) statement. *Handled Account Payable and Receivable, organized and input all invoices. *Worked with most P.O.S. systems (Micros, Aloha and Squirrel). *Accurately handle and estimate table turns using OPENTABLE. *Managed and input monthly inventories. ===Dante’s Seafood Grill, Pier 39=== *San Francisco, CA *03/05 – 07/06 *'''Assistant Manager''' *Opened and closed restaurant. *Supervised and motivate Front of House Staff on a daily bases. *Interviewed, scheduled, pay-role and handled administrative functions. ===W Hotel=== *San Francisco, CA *11/04 – 03/05 *'''XYZ Restaurant, Management Internship''' *Completed a comprehensive Management Internship program focused on daily operations. *Experience includes working with Local 2 employees. *Managed invoice control, employee time management and daily administrative functions. ===The Tavern Grill=== *San Francisco, CA *10/03 – 03/05 *'''Head Server/Banquet Server''' *Responsible for opening and closing the dining room. *Knowledge of Aloha & Micros POS (Point of Sales) systems. *Outstanding guest service in fine dining atmosphere with thorough knowledge of service timing. ===JPMorgan Chase & Co.=== *San Francisco, CA *01/00 – 09/03 *'''Graphic/Multimedia Designer''' *Effectively organized time and worked to consistently meet critical deadlines. *Created and edited short animation sequences for use in company pitches. *Produced camera-ready art utilizing Apple and Windows computer systems with laser printing equipment. ===Wit SoundView=== *San Francisco, CA *07/99 – 01/01 *'''Project Manager/Technical Publication''' *Coordinated production of all printed collateral. *Recommended and worked with sales and print representatives on a daily basis. *Supervised and maintained a staff of 15 designers. ==Hobbies== *Wine blogger at http://glassofgrape.com/ a8995c29cd05e4c1fa0491e370f654546b7262e2 Main Page 0 1404 1746 1681 2007-10-04T04:13:43Z Henrylamb 2 wikitext text/x-wiki {| |valign="top"| Welcome to Moonlight Design -- the personal web site of [[Henry Lamb]] and [[Steven Lawrance]] ==Henry Lamb== [[Henry Lamb]] is a professional [http://en.wikipedia.org/wiki/Restaurant restaurateur] trained in both [http://www.baychef.com/programs/hospitality_and_restaurant.asp restaurant management] and [http://www.baychef.com/programs/culinary_arts.asp culinary arts] at the [http://www.baychef.com/ California Culinary Academy]. For a few years from the late 1990s to the early 2000s, Henry was a [http://en.wikipedia.org/wiki/Graphic_designer graphic designer] trained at the [http://www.artinstitutes.edu/sanfrancisco/ Art Institute of San Francisco] and the [http://www.academyart.edu/ Academy of Art University] Visit Henry's new wine blog: [http://glassofgrape.com/ Glass of Grape] ==Steven Lawrance== [[Steven Lawrance]] is an active practitioner of [http://en.wikipedia.org/wiki/Software_engineering software engineering] and [http://en.wikipedia.org/wiki/Open-source_software open-source software enthusiast] trained in [http://www.mse.cs.cmu.edu/ software engineering] at [http://www.mse.cs.cmu.edu/ Carnegie Mellon University] and [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ business administration] with [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems computer information systems] at [http://www.bryant.edu/ Bryant University] [[Steven Lawrance#Software Project Experience|Check out the list of software that Steve has either written or contributed to]] |valign="top" width="25%"| {|border="1" | <font size="5">[https://www.moonlightdesign.org/urllock/ IE URL Lock]</font> <font size="5">[http://gnucashtoqif.sourceforge.net/ GnuCashToQIF]</font> <font size="5">[https://www.moonlightdesign.org/thunderforce/ Thunderforce]</font> <font size="3">[https://www.moonlightdesign.org/dirlist DirList]</font> <font size="2">[[Serendipity|Team Serendipity Master of Software Engineering (MSE) studio project]]</font> <font size="1">[[Personal financial process]]</font> |} |} 8c5e8e4ee09e70f82350591c0be182839243791b Template:Tech:Unison 10 1507 1749 2007-10-04T05:39:44Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Unison_%28file_synchronizer%29 Unison] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Unison_%28file_synchronizer%29 Unison] dd0bbc3652d50e966766ad667371a83c913cd830 Template:Tech:OpenSSH 10 1508 1750 2007-10-04T05:40:13Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Openssh OpenSSH] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Openssh OpenSSH] dd26a994c9f0756b4286e968c688a2333cdfb1f5 Template:Tech:Fuse 10 1509 1751 2007-10-04T05:40:53Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Filesystem_in_Userspace FUSE] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Filesystem_in_Userspace FUSE] 6ea240cca5b0b269b0d21d39fe65e2639a06e5bb Template:Tech:VBA 10 1510 1752 2007-10-04T05:41:20Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Visual_Basic_for_Applications VBA] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Visual_Basic_for_Applications VBA] c2499da2626545c2785eebb357e87133215ad39b Template:Tech:Access 10 1511 1753 2007-10-04T05:42:03Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access] 804d47fe5e60c8c8a6998a56f85a8b41c9d72e18 1754 1753 2007-10-04T05:42:33Z Stevenlawrance 1 [[Template:Tech:Microsoft Access]] moved to [[Template:Tech:Access]]: Simplified the name wikitext text/x-wiki [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access] 804d47fe5e60c8c8a6998a56f85a8b41c9d72e18 Template:Tech:Microsoft Access 10 1512 1755 2007-10-04T05:42:33Z Stevenlawrance 1 [[Template:Tech:Microsoft Access]] moved to [[Template:Tech:Access]]: Simplified the name wikitext text/x-wiki #REDIRECT [[Template:Tech:Access]] 713dbe6b7bc649730ea0db2bcf88c13400a7c9be Template:Tech:Sockets 10 1513 1756 2007-10-04T05:43:09Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Berkeley_sockets Sockets] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Berkeley_sockets Sockets] b5945a7fbb0bfea6a394310e059194d545dc8538 Template:Tech:ASP 10 1514 1757 2007-10-04T05:43:58Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Active_Server_Pages ASP] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Active_Server_Pages ASP] 07b5e9bab9c050dba6ba788f73a101b42138249d Template:Tech:Xerces 10 1515 1758 2007-10-04T05:44:34Z Stevenlawrance 1 New page: [http://xerces.apache.org/ Apache Xerces] wikitext text/x-wiki [http://xerces.apache.org/ Apache Xerces] 2319afaf556c10ae36a9440356b089a2c350bc2c Template:Tech:Aspell 10 1516 1759 2007-10-04T05:45:02Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/GNU_Aspell GNU Aspell] wikitext text/x-wiki [http://en.wikipedia.org/wiki/GNU_Aspell GNU Aspell] 9077f3988c823208a34f29eda1c8c1d4989727fb Template:Tech:ODBC 10 1517 1760 2007-10-04T05:45:26Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Open_Database_Connectivity ODBC] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Open_Database_Connectivity ODBC] 842f5a24bf387c91a1b995609c8d8c9fd74e8ebf Template:Tech:Linux 10 1518 1761 2007-10-04T05:46:10Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Linux Linux] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Linux Linux] d5bacd701d2b66f0ea11dad8b83bffdc95596be9 Template:Tech:PAM 10 1519 1762 2007-10-04T05:46:44Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Pluggable_authentication_module PAM] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Pluggable_authentication_module PAM] 99495ab6dc30814789c7e89d01b0f661f1032f23 Template:Tech:CueCat 10 1520 1763 2007-10-04T05:47:15Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/CueCat CueCat] wikitext text/x-wiki [http://en.wikipedia.org/wiki/CueCat CueCat] 306b22d2897fc72e331ede69b660c428402589a2 Template:Tech:Win16 10 1521 1764 2007-10-04T05:48:24Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Win16 Win16] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Win16 Win16] 3b79f2d46d5ed78e6a0482b84af3b1091568c258 Template:Tech:DOS 10 1522 1765 2007-10-04T05:48:49Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/DOS DOS] wikitext text/x-wiki [http://en.wikipedia.org/wiki/DOS DOS] e296530bfa9ad4a3c3b1349931210dd948048c8c Template:Tech:BASIC 10 1523 1766 2007-10-04T05:49:13Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/BASIC BASIC] wikitext text/x-wiki [http://en.wikipedia.org/wiki/BASIC BASIC] e99c74443b794a11005a34dd684e8bad67a16b1b Template:Tech:XMS 10 1524 1767 2007-10-04T05:49:33Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Extended_Memory_Specification XMS] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Extended_Memory_Specification XMS] d54d8008911e7f3e61a6d680a388efddb79f4718 Template:Tech:Pascal 10 1525 1768 2007-10-04T05:50:10Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Pascal_%28programming_language%29 Pascal] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Pascal_%28programming_language%29 Pascal] e34ff9b890e70bb0e40ee76c0347befe01c6981b Template:Tech:Serial 10 1526 1769 2007-10-04T05:51:05Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/RS-232 Serial] wikitext text/x-wiki [http://en.wikipedia.org/wiki/RS-232 Serial] be5dee3817a5da84a76028ac06141ff912ffc00f Template:Tech:CP290 10 1527 1770 2007-10-04T05:51:32Z Stevenlawrance 1 New page: [http://www.smarthome.com/manuals/MAN-1130_31p.pdf CP290] wikitext text/x-wiki [http://www.smarthome.com/manuals/MAN-1130_31p.pdf CP290] fc991fec14c1e6693086ec2c1d330c82c41360fc Template:Tech:SNMP 10 1528 1771 2007-10-04T05:52:22Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Simple_Network_Management_Protocol SNMP] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Simple_Network_Management_Protocol SNMP] f53d4bbdf4eaaea499ff1c55a0a5b67077d07760 Template:Tech:VisualBasic 10 1529 1772 2007-10-04T05:53:03Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Visual_basic Visual Basic] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Visual_basic Visual Basic] f5b71242efa6ce4114fa6e3d19c214842bcc56e7 Steven Lawrance 0 1409 1773 1748 2007-10-04T05:54:43Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-07'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}|| || |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}|| || |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}|| || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}|| || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}|| || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}|| || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}|| || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}|| || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}|| || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk||{{Tech:C}}, {{Tech:Win32}}|| || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}|| || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}|| || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C}}, {{Tech:Win32}}|| || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[Horses]]||A fun horse racing game that I made a long time ago||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}|| || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:Win16}}, {{Tech:Win32}}|| || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}|| || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)||{{Tech:C}}, {{Tech:DOS}}, {{Tech:XMS}}|| || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)||{{Tech:BASIC}}, {{Tech:DOS}}|| || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}|| || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces||{{Tech:Java}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java|| || || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 64d9f65a704619a174e8726bc6d9b86d048849d4 1777 1773 2007-10-04T06:09:20Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-07'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}|| || |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}|| || |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}|| || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}|| || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}|| || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}|| || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}|| || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}|| || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}|| || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk||{{Tech:C}}, {{Tech:Win32}}|| || |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}|| || |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}|| || |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C}}, {{Tech:Win32}}|| || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[Horses]]||A fun horse racing game that I made a long time ago||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}|| || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:Win16}}, {{Tech:Win32}}|| || |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}|| || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)||{{Tech:C}}, {{Tech:DOS}}, {{Tech:XMS}}|| || |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)||{{Tech:BASIC}}, {{Tech:DOS}}|| || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}|| || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces||{{Tech:Java}}|| || |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 1c19fb3e5e92d75814b4a3c653d4e7cf3f19da46 1778 1777 2007-10-04T06:30:26Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-07'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}|| || |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}|| || |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}|| || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}|| || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}|| || |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}|| || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}|| || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}|| || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}|| || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk||{{Tech:C}}, {{Tech:Win32}}||650||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1997-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily||{{Tech:C}}, {{Tech:Win16}}||3,676||1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C}}, {{Tech:Win32}}|| || |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[Horses]]||A fun horse racing game that I made a long time ago||{{Tech:C}}, {{Tech:Win16}}||3,348||1997 |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}|| || |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}||2,953||1997 |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}|| || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)||{{Tech:C}}, {{Tech:DOS}}, {{Tech:XMS}}||1,240||1998 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)||{{Tech:BASIC}}, {{Tech:DOS}}|| || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}|| || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces||{{Tech:Java}}||3,690||1997-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 69880bf292b1f73f579473ad44876219f9d28ed5 1779 1778 2007-10-04T14:22:51Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-07'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}|| || |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}|| || |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}|| || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}|| || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}|| ||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}|| || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}|| || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}|| || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}|| || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk||{{Tech:C}}, {{Tech:Win32}}||650||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing game that I made a long time ago||{{Tech:C}}, {{Tech:Win16}}||3,348||1996-1997 |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}|| || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)||{{Tech:C}}, {{Tech:DOS}}, {{Tech:XMS}}||1,240||1998 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)||{{Tech:BASIC}}, {{Tech:DOS}}|| || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}|| || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces||{{Tech:Java}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] c62256b29357199364eabbc898877aa6a97966d3 1780 1779 2007-10-04T14:26:09Z Stevenlawrance 1 /* Software and project contributions */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-07'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}|| || |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}|| || |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}|| || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}|| || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}|| ||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}|| || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}|| || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}|| || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}|| || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk||{{Tech:C}}, {{Tech:Win32}}||650||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing game that I made a long time ago||{{Tech:C}}, {{Tech:Win16}}||3,348||1996-1997 |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}|| || |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)||{{Tech:C}}, {{Tech:DOS}}, {{Tech:XMS}}||1,240||1998 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)||{{Tech:BASIC}}, {{Tech:DOS}}|| || |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}|| || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces||{{Tech:Java}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] d1e4239d20e44a32831059c8ad267560701da3b7 1781 1780 2007-10-04T14:30:51Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-07'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}|| || |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}|| || |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}|| || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}|| || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}|| ||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}|| || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}|| || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}|| || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}|| || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk||{{Tech:C}}, {{Tech:Win32}}||650||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing game that I made a long time ago||{{Tech:C}}, {{Tech:Win16}}||3,348||1996-1997 |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)||{{Tech:C}}, {{Tech:DOS}}, {{Tech:XMS}}||1,240||1998 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)||{{Tech:BASIC}}, {{Tech:DOS}}|| ||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}|| || |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces||{{Tech:Java}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 1b4d2f9391b075a12478d23cc5a6b1e916308c5e 1782 1781 2007-10-04T14:33:47Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-07'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}|| || |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}|| || |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}|| || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}|| || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}|| ||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}|| || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}|| || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}|| || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}|| || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk||{{Tech:C}}, {{Tech:Win32}}||650||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing game that I made a long time ago||{{Tech:C}}, {{Tech:Win16}}||3,348||1996-1997 |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)||{{Tech:C}}, {{Tech:DOS}}, {{Tech:XMS}}||1,240||1998 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)||{{Tech:BASIC}}, {{Tech:DOS}}|| ||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces||{{Tech:Java}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] cd4b55f58d7694c1f18a5b86c369e54a0e97438f 1783 1782 2007-10-04T14:37:08Z Stevenlawrance 1 /* Software and project contributions */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-07'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}|| || |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}|| || |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}|| || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}|| || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}|| ||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}|| || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}|| || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}|| || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}|| || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk||{{Tech:C}}, {{Tech:Win32}}||650||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing game that I made a long time ago||{{Tech:C}}, {{Tech:Win16}}||3,348||1996-1997 |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || || |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)||{{Tech:C}}, {{Tech:DOS}}, {{Tech:XMS}}||1,240||1998 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)||{{Tech:BASIC}}, {{Tech:DOS}}|| ||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces||{{Tech:Java}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 6e8c813fc8d0d54bc34e07fdc3aaa8a4ef97fa50 1784 1783 2007-10-04T14:40:12Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-07'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}|| || |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}|| || |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}|| || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}|| || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}|| ||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}|| || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}|| || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}|| || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}|| || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk||{{Tech:C}}, {{Tech:Win32}}||650||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing game that I made a long time ago||{{Tech:C}}, {{Tech:Win16}}||3,348||1996-1997 |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || ||1994 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)||{{Tech:C}}, {{Tech:DOS}}, {{Tech:XMS}}||1,240||1998 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces||{{Tech:Java}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admissions process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] da8318f60f075fde6abd19496c9de5c10c7a206a 1785 1784 2007-10-07T15:13:45Z Stevenlawrance 1 /* Software and project contributions */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-07'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}|| || |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}|| || |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}|| || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}|| || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}|| ||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}|| || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}|| || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}|| || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}|| || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk||{{Tech:C}}, {{Tech:Win32}}||650||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing game that I made a long time ago||{{Tech:C}}, {{Tech:Win16}}||3,348||1996-1997 |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || ||1994 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[GlobalXMS]]||A small XMS memory manager that uses Windows-like memory manipulation functions (the XMS code itself was taken from Paul Chang's open-source XMMLIB.CPP)||{{Tech:C}}, {{Tech:DOS}}, {{Tech:XMS}}||1,240||1998 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces||{{Tech:Java}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 2cf88239e23558a5cd55e30814f0ffbecb525a80 1786 1785 2007-10-07T15:27:40Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-07'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}|| || |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}|| || |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}|| || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}|| || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}|| ||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}|| || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}|| || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}|| || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}|| || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk||{{Tech:C}}, {{Tech:Win32}}||650||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing game that I made a long time ago||{{Tech:C}}, {{Tech:Win16}}||3,348||1996-1997 |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || ||1994 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide blt-like operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces||{{Tech:Java}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 97a70f02c4ca94ebf10cac611fc92288a68e451d 1787 1786 2007-10-07T15:33:09Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-07'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}|| || |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door|| || || |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}|| || |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}|| || |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}|| || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}|| ||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}|| || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}|| || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}|| || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}|| || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk||{{Tech:C}}, {{Tech:Win32}}||650||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing game that I made a long time ago||{{Tech:C}}, {{Tech:Win16}}||3,348||1996-1997 |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || ||1994 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide [http://en.wikipedia.org/wiki/BitBLT bit blit-like] operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces||{{Tech:Java}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 3d807a1eef198fbfdb5abeca512f23d5cdad60bc 1789 1787 2007-10-07T20:40:58Z Stevenlawrance 1 /* Software Project Experience */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-07'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||20,939||1999-2007 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}|| || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}|| ||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}|| || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}|| || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}|| || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}|| || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk||{{Tech:C}}, {{Tech:Win32}}||650||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing game that I made a long time ago||{{Tech:C}}, {{Tech:Win16}}||3,348||1996-1997 |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || ||1994 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide [http://en.wikipedia.org/wiki/BitBLT bit blit-like] operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces||{{Tech:Java}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Championed HIPAA compliance **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] b3bbc7957a22b2395da0806c08eaf4b3c7c182ff 1793 1789 2007-10-07T20:58:59Z Stevenlawrance 1 /* [http://www.sfaf.org/ San Francisco AIDS Foundation] */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-07'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||20,939||1999-2007 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}|| || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}|| ||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}|| || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP|| || || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}|| || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}|| || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}|| || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk||{{Tech:C}}, {{Tech:Win32}}||650||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing game that I made a long time ago||{{Tech:C}}, {{Tech:Win16}}||3,348||1996-1997 |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || ||1994 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide [http://en.wikipedia.org/wiki/BitBLT bit blit-like] operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces||{{Tech:Java}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 40f504c1deaf2522bd138a4d47c0e7da355dd674 1794 1793 2007-10-07T21:02:16Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-07'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||20,939||1999-2007 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}|| || |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}|| ||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}|| || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP||{{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}|| || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}|| || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}|| || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk||{{Tech:C}}, {{Tech:Win32}}||650||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing game that I made a long time ago||{{Tech:C}}, {{Tech:Win16}}||3,348||1996-1997 |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || ||1994 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide [http://en.wikipedia.org/wiki/BitBLT bit blit-like] operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces||{{Tech:Java}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] a97e99accef9806527ed2ca3b4e887c9dfa27479 1796 1794 2007-10-08T05:46:38Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-07'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||20,939||1999-2007 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}|| ||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}|| || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP||{{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}|| || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}|| || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}|| || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk||{{Tech:C}}, {{Tech:Win32}}||650||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing game that I made a long time ago||{{Tech:C}}, {{Tech:Win16}}||3,348||1996-1997 |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || ||1994 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide [http://en.wikipedia.org/wiki/BitBLT bit blit-like] operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces||{{Tech:Java}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 2fd2b9a8d3f710d41d2cf0572d402cb855bc4198 1806 1796 2007-10-08T07:08:22Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-07'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||20,939||1999-2007 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}|| || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP||{{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}|| || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}|| || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}|| || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk||{{Tech:C}}, {{Tech:Win32}}||650||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing game that I made a long time ago||{{Tech:C}}, {{Tech:Win16}}||3,348||1996-1997 |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || ||1994 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide [http://en.wikipedia.org/wiki/BitBLT bit blit-like] operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces||{{Tech:Java}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 47442f42a242e8be11dfb39a591094422de948cf Template:Tech:x86 Assembler 10 1530 1774 2007-10-04T05:55:23Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/X86_assembly_language x86 Assembler] wikitext text/x-wiki [http://en.wikipedia.org/wiki/X86_assembly_language x86 Assembler] 52f7180d8efee51c100d2c0f798ee4387b40601c Template:Tech:X11 10 1531 1775 2007-10-04T06:07:55Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/X11 X11] wikitext text/x-wiki [http://en.wikipedia.org/wiki/X11 X11] e1bfe4a7535405d6a853d74237a3baccb06dce1c Template:Tech:Cocoa 10 1532 1776 2007-10-04T06:08:16Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Cocoa_%28API%29 Cocoa] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Cocoa_%28API%29 Cocoa] 16ab77c6fe2b9b086f7851e9e2ea7ba26b105803 Template:Tech:Javelin 10 1533 1788 2007-10-07T20:30:23Z Stevenlawrance 1 New page: [http://www.parallax.com/javelin/ Parallax Javelin] wikitext text/x-wiki [http://www.parallax.com/javelin/ Parallax Javelin] 69c78b1d69868c446443243b6326f0ad48291093 Home Profiler 0 1534 1790 2007-10-07T20:45:36Z Stevenlawrance 1 New page: Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate ... wikitext text/x-wiki Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind. More information about this program will be posted soon. 6b835d074d1fe8c0d5164daeb703378784771651 Backup system 0 1535 1791 2007-10-07T20:46:06Z Stevenlawrance 1 New page: Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage. More information about this product will be posted s... wikitext text/x-wiki Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage. More information about this product will be posted soon. 9bb3a4a5839208869fddcea809f10e218daf4344 Read-only filesystem 0 1536 1792 2007-10-07T20:46:35Z Stevenlawrance 1 New page: FUSE filesystem view that makes all files unconditionally read-only. I use this in my backup system for the web-based file restore interface. More information about this small program wil... wikitext text/x-wiki FUSE filesystem view that makes all files unconditionally read-only. I use this in my backup system for the web-based file restore interface. More information about this small program will be posted soon. 215e207fb6233c3ab997c36fe0106d223e4c9ff4 SLOS-DOS 0 1537 1795 2007-10-08T05:46:05Z Stevenlawrance 1 New page: Steven Lawrance's Operating System (SLOS), also known briefly as Steven Lawrance's Operating Program (SL-OP), was a small interpreted toy operating environment written in {{Tech:BASIC}} fo... wikitext text/x-wiki Steven Lawrance's Operating System (SLOS), also known briefly as Steven Lawrance's Operating Program (SL-OP), was a small interpreted toy operating environment written in {{Tech:BASIC}} for {{Tech:DOS}}. The primary motivation for writing this was to have an environment that supported long file names. ==Scripting Language== SLOS executes script files having a "exc" file extension in an interpreted manner. Because this interpreter is running within the BASIC interpreter, execution speed is noticeably slow. ==Limitations== SLOS's scripting environment contains a large list of limitations, and some are expressed in the following list: *The screen always has a light-blue background with a white foreground *Conditional expressions are only allowed in a few operations *Programs get only one number variable and one string variable, which is a huge limitation for all but trivial programs *Loading and saving data files within a program is limited to saving the program's two variables *Looping can only be done with the only number variable that you have 420ba6afb76b27b08a54d990c28abc5a78fd65f9 1797 1795 2007-10-08T05:48:46Z Stevenlawrance 1 wikitext text/x-wiki Steven Lawrance's Operating System (SLOS), also known briefly as Steven Lawrance's Operating Program (SL-OP), was a small interpreted toy operating environment written in {{Tech:BASIC}} for {{Tech:DOS}}. The primary motivation for writing this was to have an environment that supported [http://en.wikipedia.org/wiki/Long_filename long file names]. This was written in 1993 -- two years before [http://en.wikipedia.org/wiki/Microsoft Microsoft] released native long file name support in a consumer operating system with [http://en.wikipedia.org/wiki/Windows_95 Windows 95]. ==Scripting Language== SLOS executes script files having a "exc" file extension in an interpreted manner. Because this interpreter is running within the BASIC interpreter, execution speed is noticeably slow. ==Limitations== SLOS's scripting environment contains a large list of limitations, and some are expressed in the following list: *The screen always has a light-blue background with a white foreground *Conditional expressions are only allowed in a few operations *Programs get only one number variable and one string variable, which is a huge limitation for all but trivial programs *Loading and saving data files within a program is limited to saving the program's two variables *Looping can only be done with the only number variable that you have bbed63148f32c9d5a2b613fa3f658f5bf829fd79 1798 1797 2007-10-08T05:52:52Z Stevenlawrance 1 wikitext text/x-wiki Steven Lawrance's Operating System (SLOS), also known briefly as Steven Lawrance's Operating Program (SL-OP), was a small interpreted toy operating environment written in {{Tech:BASIC}} for {{Tech:DOS}}. The primary motivation for writing this was to have an environment that supported [http://en.wikipedia.org/wiki/Long_filename long file names]. This was written in 1993 -- two years before [http://en.wikipedia.org/wiki/Microsoft Microsoft] released native long file name support in a consumer operating system with [http://en.wikipedia.org/wiki/Windows_95 Windows 95]. SLOS was primarily distributed on the [http://www.flightsim.com/arcanum/fs.htm Contrails] [http://en.wikipedia.org/wiki/Bulletin_board_system BBS] in [http://en.wikipedia.org/wiki/Euless%2C_Texas Euless, Texas]. ==Scripting Language== SLOS executes script files having a "exc" file extension in an interpreted manner. Because this interpreter is running within the BASIC interpreter, execution speed is noticeably slow. ==Limitations== SLOS's scripting environment contains a large list of limitations, and some are expressed in the following list: *The screen always has a light-blue background with a white foreground *Conditional expressions are only allowed in a few operations *Programs get only one number variable and one string variable, which is a huge limitation for all but trivial programs *Loading and saving data files within a program is limited to saving the program's two variables *Looping can only be done with the only number variable that you have 67053efefffba1828588a612c6b210b93cf1b2c1 1799 1798 2007-10-08T05:56:10Z Stevenlawrance 1 wikitext text/x-wiki Steven Lawrance's Operating System (SLOS), also known briefly as Steven Lawrance's Operating Program (SL-OP), was a small interpreted toy operating environment written in {{Tech:BASIC}} for {{Tech:DOS}}. The primary motivation for writing this was to have an environment that supported [http://en.wikipedia.org/wiki/Long_filename long file names]. This was written in 1993 -- two years before [http://en.wikipedia.org/wiki/Microsoft Microsoft] released native long file name support in a consumer operating system with [http://en.wikipedia.org/wiki/Windows_95 Windows 95]. SLOS was primarily distributed on the [http://www.flightsim.com/arcanum/fs.htm Contrails] [http://en.wikipedia.org/wiki/Bulletin_board_system BBS] in [http://en.wikipedia.org/wiki/Euless%2C_Texas Euless, Texas]. It is now distributed from this web site. ==Download== '''[https://www.moonlightdesign.org/steve/programs/slosdist1.exe Download SLOS-DOS]''' '''[https://www.moonlightdesign.org/steve/programs/sloswin.zip Download SLOS-Win]''', a [[SLOS-Win|Windows version of SLOS]] ==Scripting Language== SLOS executes script files having a "exc" file extension in an interpreted manner. Because this interpreter is running within the BASIC interpreter, execution speed is noticeably slow. ==Limitations== SLOS's scripting environment contains a large list of limitations, and some are expressed in the following list: *The screen always has a light-blue background with a white foreground *Conditional expressions are only allowed in a few operations *Programs get only one number variable and one string variable, which is a huge limitation for all but trivial programs *Loading and saving data files within a program is limited to saving the program's two variables *Looping can only be done with the only number variable that you have 16b1f5dba43569ffff55b8a3f6b321e6776b89bf 1800 1799 2007-10-08T06:10:41Z Stevenlawrance 1 wikitext text/x-wiki Steven Lawrance's Operating System (SLOS), also known briefly as Steven Lawrance's Operating Program (SL-OP), was a small interpreted toy operating environment written in {{Tech:BASIC}} for {{Tech:DOS}}. The primary motivation for writing this was to have an environment that supported [http://en.wikipedia.org/wiki/Long_filename long file names]. This was written in 1993 -- two years before [http://en.wikipedia.org/wiki/Microsoft Microsoft] released native long file name support in a consumer operating system with [http://en.wikipedia.org/wiki/Windows_95 Windows 95]. SLOS was primarily distributed on the [http://www.flightsim.com/arcanum/fs.htm Contrails] [http://en.wikipedia.org/wiki/Bulletin_board_system BBS] in [http://en.wikipedia.org/wiki/Euless%2C_Texas Euless, Texas]. It is now distributed from this web site. ==Download== '''[https://www.moonlightdesign.org/steve/programs/slosdist1.exe Download SLOS-DOS and SLOS-Win]''' '''[https://www.moonlightdesign.org/steve/programs/sloswin.zip Download SLOS-Win's Source Code]''', a [[SLOS-Win|Windows version of SLOS]] ==Scripting Language== SLOS executes script files having a "exc" file extension in an interpreted manner. Because this interpreter is running within the BASIC interpreter, execution speed is noticeably slow. ==Limitations== SLOS's scripting environment contains a large list of limitations, and some are expressed in the following list: *The screen always has a light-blue background with a white foreground *Conditional expressions are only allowed in a few operations *Programs get only one number variable and one string variable, which is a huge limitation for all but trivial programs *Loading and saving data files within a program is limited to saving the program's two variables *Looping can only be done with the only number variable that you have 848e565f1b5e283c4c740bc23562050ef557ae19 1801 1800 2007-10-08T06:57:09Z Stevenlawrance 1 wikitext text/x-wiki Steven Lawrance's Operating System (SLOS), also known briefly as Steven Lawrance's Operating Program (SL-OP), was a small interpreted toy operating environment written in {{Tech:BASIC}} for {{Tech:DOS}}. The primary motivation for writing this was to have an environment that supported [http://en.wikipedia.org/wiki/Long_filename long file names]. This was written in 1993 -- two years before [http://en.wikipedia.org/wiki/Microsoft Microsoft] released native long file name support in a consumer operating system with [http://en.wikipedia.org/wiki/Windows_95 Windows 95]. SLOS was primarily distributed on the [http://www.flightsim.com/arcanum/fs.htm Contrails] [http://en.wikipedia.org/wiki/Bulletin_board_system BBS] in [http://en.wikipedia.org/wiki/Euless%2C_Texas Euless, Texas]. It is now distributed from this web site. ==Download== '''[https://www.moonlightdesign.org/steve/programs/slosdist1.exe Download SLOS-DOS and SLOS-Win]''' '''[https://www.moonlightdesign.org/steve/programs/sloswin.zip Download SLOS-Win's Source Code]''', a [[SLOS-Win|Windows version of SLOS]] ==Commands== SLOS's command prompt permits the user to run any of the following commands from its [http://en.wikipedia.org/wiki/Smiley smile emoticon] :-) prompt: {|border="1" |- |SLTOOLS||Steven Lawrance's Tools |- |HELP||Help System |- |DIR||File Listing |- |CLS||Clears Screen |- |RUN program||Runs a Program |- |LOAD program||Loads a Program |- |EDIT||Creates a New DOS File |- |EDIT filename||Edits an SL-File |- |NEW filename||Creates a New SL File |- |FAT||Updates FAT |- |EXIT||Exits SL-OS |- |QUIT||Exits SL-OS |- |DEL filename||Deletes an SL-File |- |UNDEL||Undeletes an SL-File with a DOS name |- |UNDEL filename||Undeletes an SL-File with a DOS name |- |PURGE||Purges a Deleted SL-File |} ==Scripting Language== SLOS executes script files having a "exc" file extension in an interpreted manner. Because this interpreter is running within the BASIC interpreter, execution speed is noticeably slow. The scripting language is difficult to read due to its overuse of abbreviations. [[CatSetup]], by contrast, has a scripting language that is easier to write and read. ===Syntax=== The following commands are possible in a SLOS program. Each command appears by itself on its own line with no surrounding whitespace. {|border="1" |- |P!text |Prints text on the screen. {|border="1" |Example: |- |P!Hello!||How are you today? |} |- |I$nquestion |Asks a question. n=number of answers, question=text to display {|border="1" |Example: |- |I$2Do you? [Y] [N]||Ask "Do you? [Y] [N]" with 2 (Y,N) options |- |Y||User pressed Y |- |S#7||What to do when the user pressed Y |- |N||User pressed N |- |P!Why not?!||What to do when the user pressed N |- |ND||End application |- |P!Good!||Display "Good!" on the screen |- |ND||End application |} |- |I#nquestion||Just like I$nquestion, except it operates with numbers (not letters such as Y and N). |- |L#xxyy |Locates a position (xx,yy) on the screen. {|border="1" |Example: |- |L#3002||Locates (30,2) or (30,02) on the screen |} |- |S#line |Skips to a line in the program. {|border="1" |Example: |- |S#2||Skips to line number 2 |- |P!Hi!||Prints "Hi!" at line number 2 |} |- |D$command (II function) |Runs DOS program. Use II to set parameters. II isn't required. {|border="1" |Example: |- |P!Enter Parameters |- |II||Asks user to supply parameters |- |D$EDIT||Executes command "EDIT" Note: D$ can work by itself assuming II has a value |} |- |F$file |Loads a value into the file variable. {|border="1" |Example: |- |F$Configuration File||Sets "Configuration File" as the file var. |} |- |L!||Loads the string and number variable from file. Don't worry about it until you understand it. |- |SV$string||Sets the string variable. |- |SV!number |Sets the number variable. {|border="1" |Example: |- |SV$Hello there!||Sets string variable to "Hello there!" |- |SV#9||Sets number variable to 9 |- |F$Hello!||Sets file variable to "Hello!" |- |S!||Saves string and number variables to "Hello!" |} |- |$givenvalue |If string variable equals givenvalue, execute next instruction. Else, execute instruction after next. {|border="1" |Example: |- |P!Enter a string value:||Types text on screen |- |V$||Asks user for the string variable |- |$Hello||If string variable = "Hello", |- |S#7||Go to line number 7. |- |P!You didn't type in "Hello"!||Else, print text. |- |ND||Exit |- |P!You typed in "Hello"!||Print text |- |ND||Exit |} |- |#givennumber||If number variable equals givennumber, execute next instruction. Else, execute instruction after next. Note: This is just like $givenvalue, except a number should be in the givennumber. |} ===Example=== The following example is a very trivial animation program named "Animation Master" in SLOS. It requires the user to hold down a key to switch between two screens to make the user think that the person is talking. <pre> C! P!Animation Master v2.1 P!Version for SL-OS P! I$4Ready for some fun? [Y] [N] Y S#15 y S#15 N S#13 n P!You don't know what you are missing! ND C! P! . . P! . - , I talking! P! --- L#0120 I$2Press [1] for next frame, hold [1] for animation, or [0] to exit. 1 S#25 0 ND C! P! . . P! . - Hello, am ! P! \___/ L#0120 I$2Press [1] for next frame, hold [1] for animation, or [0] to exit. 1 S#15 0 ND </pre> ==Limitations== SLOS's scripting environment contains a large list of limitations, and some are expressed in the following list: *The scripting language is not [http://en.wikipedia.org/wiki/Turing_completeness Turing-complete] *The screen always has a light-blue background with a white foreground *Conditional expressions are only allowed in a few operations *Programs get only one number variable and one string variable, which is a huge limitation for all but trivial programs *Loading and saving data files within a program is limited to saving the program's two variables *Looping can only be done with the only number variable that you have 7c96fc7a582f6a579110873d3b3fffdf21ae94ed 1803 1801 2007-10-08T07:05:45Z Stevenlawrance 1 /* Commands */ wikitext text/x-wiki Steven Lawrance's Operating System (SLOS), also known briefly as Steven Lawrance's Operating Program (SL-OP), was a small interpreted toy operating environment written in {{Tech:BASIC}} for {{Tech:DOS}}. The primary motivation for writing this was to have an environment that supported [http://en.wikipedia.org/wiki/Long_filename long file names]. This was written in 1993 -- two years before [http://en.wikipedia.org/wiki/Microsoft Microsoft] released native long file name support in a consumer operating system with [http://en.wikipedia.org/wiki/Windows_95 Windows 95]. SLOS was primarily distributed on the [http://www.flightsim.com/arcanum/fs.htm Contrails] [http://en.wikipedia.org/wiki/Bulletin_board_system BBS] in [http://en.wikipedia.org/wiki/Euless%2C_Texas Euless, Texas]. It is now distributed from this web site. ==Download== '''[https://www.moonlightdesign.org/steve/programs/slosdist1.exe Download SLOS-DOS and SLOS-Win]''' '''[https://www.moonlightdesign.org/steve/programs/sloswin.zip Download SLOS-Win's Source Code]''', a [[SLOS-Win|Windows version of SLOS]] ==Commands== [[Image:Slos-installed.png|right|thumb|450px|Screen shot of what SLOS looks like on its first use, which runs a small installer to finalize the setup]] SLOS's command prompt permits the user to run any of the following commands from its [http://en.wikipedia.org/wiki/Smiley smile emoticon] :-) prompt: {|border="1" |- |SLTOOLS||Steven Lawrance's Tools |- |HELP||Help System |- |DIR||File Listing |- |CLS||Clears Screen |- |RUN program||Runs a Program |- |LOAD program||Loads a Program |- |EDIT||Creates a New DOS File |- |EDIT filename||Edits an SL-File |- |NEW filename||Creates a New SL File |- |FAT||Updates FAT |- |EXIT||Exits SL-OS |- |QUIT||Exits SL-OS |- |DEL filename||Deletes an SL-File |- |UNDEL||Undeletes an SL-File with a DOS name |- |UNDEL filename||Undeletes an SL-File with a DOS name |- |PURGE||Purges a Deleted SL-File |} ==Scripting Language== SLOS executes script files having a "exc" file extension in an interpreted manner. Because this interpreter is running within the BASIC interpreter, execution speed is noticeably slow. The scripting language is difficult to read due to its overuse of abbreviations. [[CatSetup]], by contrast, has a scripting language that is easier to write and read. ===Syntax=== The following commands are possible in a SLOS program. Each command appears by itself on its own line with no surrounding whitespace. {|border="1" |- |P!text |Prints text on the screen. {|border="1" |Example: |- |P!Hello!||How are you today? |} |- |I$nquestion |Asks a question. n=number of answers, question=text to display {|border="1" |Example: |- |I$2Do you? [Y] [N]||Ask "Do you? [Y] [N]" with 2 (Y,N) options |- |Y||User pressed Y |- |S#7||What to do when the user pressed Y |- |N||User pressed N |- |P!Why not?!||What to do when the user pressed N |- |ND||End application |- |P!Good!||Display "Good!" on the screen |- |ND||End application |} |- |I#nquestion||Just like I$nquestion, except it operates with numbers (not letters such as Y and N). |- |L#xxyy |Locates a position (xx,yy) on the screen. {|border="1" |Example: |- |L#3002||Locates (30,2) or (30,02) on the screen |} |- |S#line |Skips to a line in the program. {|border="1" |Example: |- |S#2||Skips to line number 2 |- |P!Hi!||Prints "Hi!" at line number 2 |} |- |D$command (II function) |Runs DOS program. Use II to set parameters. II isn't required. {|border="1" |Example: |- |P!Enter Parameters |- |II||Asks user to supply parameters |- |D$EDIT||Executes command "EDIT" Note: D$ can work by itself assuming II has a value |} |- |F$file |Loads a value into the file variable. {|border="1" |Example: |- |F$Configuration File||Sets "Configuration File" as the file var. |} |- |L!||Loads the string and number variable from file. Don't worry about it until you understand it. |- |SV$string||Sets the string variable. |- |SV!number |Sets the number variable. {|border="1" |Example: |- |SV$Hello there!||Sets string variable to "Hello there!" |- |SV#9||Sets number variable to 9 |- |F$Hello!||Sets file variable to "Hello!" |- |S!||Saves string and number variables to "Hello!" |} |- |$givenvalue |If string variable equals givenvalue, execute next instruction. Else, execute instruction after next. {|border="1" |Example: |- |P!Enter a string value:||Types text on screen |- |V$||Asks user for the string variable |- |$Hello||If string variable = "Hello", |- |S#7||Go to line number 7. |- |P!You didn't type in "Hello"!||Else, print text. |- |ND||Exit |- |P!You typed in "Hello"!||Print text |- |ND||Exit |} |- |#givennumber||If number variable equals givennumber, execute next instruction. Else, execute instruction after next. Note: This is just like $givenvalue, except a number should be in the givennumber. |} ===Example=== The following example is a very trivial animation program named "Animation Master" in SLOS. It requires the user to hold down a key to switch between two screens to make the user think that the person is talking. <pre> C! P!Animation Master v2.1 P!Version for SL-OS P! I$4Ready for some fun? [Y] [N] Y S#15 y S#15 N S#13 n P!You don't know what you are missing! ND C! P! . . P! . - , I talking! P! --- L#0120 I$2Press [1] for next frame, hold [1] for animation, or [0] to exit. 1 S#25 0 ND C! P! . . P! . - Hello, am ! P! \___/ L#0120 I$2Press [1] for next frame, hold [1] for animation, or [0] to exit. 1 S#15 0 ND </pre> ==Limitations== SLOS's scripting environment contains a large list of limitations, and some are expressed in the following list: *The scripting language is not [http://en.wikipedia.org/wiki/Turing_completeness Turing-complete] *The screen always has a light-blue background with a white foreground *Conditional expressions are only allowed in a few operations *Programs get only one number variable and one string variable, which is a huge limitation for all but trivial programs *Loading and saving data files within a program is limited to saving the program's two variables *Looping can only be done with the only number variable that you have 3f33327d041b92d2d40f3fc74a87dca9e07a533b 1805 1803 2007-10-08T07:07:04Z Stevenlawrance 1 /* Commands */ wikitext text/x-wiki Steven Lawrance's Operating System (SLOS), also known briefly as Steven Lawrance's Operating Program (SL-OP), was a small interpreted toy operating environment written in {{Tech:BASIC}} for {{Tech:DOS}}. The primary motivation for writing this was to have an environment that supported [http://en.wikipedia.org/wiki/Long_filename long file names]. This was written in 1993 -- two years before [http://en.wikipedia.org/wiki/Microsoft Microsoft] released native long file name support in a consumer operating system with [http://en.wikipedia.org/wiki/Windows_95 Windows 95]. SLOS was primarily distributed on the [http://www.flightsim.com/arcanum/fs.htm Contrails] [http://en.wikipedia.org/wiki/Bulletin_board_system BBS] in [http://en.wikipedia.org/wiki/Euless%2C_Texas Euless, Texas]. It is now distributed from this web site. ==Download== '''[https://www.moonlightdesign.org/steve/programs/slosdist1.exe Download SLOS-DOS and SLOS-Win]''' '''[https://www.moonlightdesign.org/steve/programs/sloswin.zip Download SLOS-Win's Source Code]''', a [[SLOS-Win|Windows version of SLOS]] ==Commands== [[Image:Slos-installed.png|right|thumb|450px|Screen shot of what SLOS looks like on its first use, which runs a small installer to finalize the setup]] [[Image:Slos-dir.png|right|thumb|450px|Screen shot of the DIR directory listing command]] SLOS's command prompt permits the user to run any of the following commands from its [http://en.wikipedia.org/wiki/Smiley smile emoticon] :-) prompt: {|border="1" |- |SLTOOLS||Steven Lawrance's Tools |- |HELP||Help System |- |DIR||File Listing |- |CLS||Clears Screen |- |RUN program||Runs a Program |- |LOAD program||Loads a Program |- |EDIT||Creates a New DOS File |- |EDIT filename||Edits an SL-File |- |NEW filename||Creates a New SL File |- |FAT||Updates FAT |- |EXIT||Exits SL-OS |- |QUIT||Exits SL-OS |- |DEL filename||Deletes an SL-File |- |UNDEL||Undeletes an SL-File with a DOS name |- |UNDEL filename||Undeletes an SL-File with a DOS name |- |PURGE||Purges a Deleted SL-File |} ==Scripting Language== SLOS executes script files having a "exc" file extension in an interpreted manner. Because this interpreter is running within the BASIC interpreter, execution speed is noticeably slow. The scripting language is difficult to read due to its overuse of abbreviations. [[CatSetup]], by contrast, has a scripting language that is easier to write and read. ===Syntax=== The following commands are possible in a SLOS program. Each command appears by itself on its own line with no surrounding whitespace. {|border="1" |- |P!text |Prints text on the screen. {|border="1" |Example: |- |P!Hello!||How are you today? |} |- |I$nquestion |Asks a question. n=number of answers, question=text to display {|border="1" |Example: |- |I$2Do you? [Y] [N]||Ask "Do you? [Y] [N]" with 2 (Y,N) options |- |Y||User pressed Y |- |S#7||What to do when the user pressed Y |- |N||User pressed N |- |P!Why not?!||What to do when the user pressed N |- |ND||End application |- |P!Good!||Display "Good!" on the screen |- |ND||End application |} |- |I#nquestion||Just like I$nquestion, except it operates with numbers (not letters such as Y and N). |- |L#xxyy |Locates a position (xx,yy) on the screen. {|border="1" |Example: |- |L#3002||Locates (30,2) or (30,02) on the screen |} |- |S#line |Skips to a line in the program. {|border="1" |Example: |- |S#2||Skips to line number 2 |- |P!Hi!||Prints "Hi!" at line number 2 |} |- |D$command (II function) |Runs DOS program. Use II to set parameters. II isn't required. {|border="1" |Example: |- |P!Enter Parameters |- |II||Asks user to supply parameters |- |D$EDIT||Executes command "EDIT" Note: D$ can work by itself assuming II has a value |} |- |F$file |Loads a value into the file variable. {|border="1" |Example: |- |F$Configuration File||Sets "Configuration File" as the file var. |} |- |L!||Loads the string and number variable from file. Don't worry about it until you understand it. |- |SV$string||Sets the string variable. |- |SV!number |Sets the number variable. {|border="1" |Example: |- |SV$Hello there!||Sets string variable to "Hello there!" |- |SV#9||Sets number variable to 9 |- |F$Hello!||Sets file variable to "Hello!" |- |S!||Saves string and number variables to "Hello!" |} |- |$givenvalue |If string variable equals givenvalue, execute next instruction. Else, execute instruction after next. {|border="1" |Example: |- |P!Enter a string value:||Types text on screen |- |V$||Asks user for the string variable |- |$Hello||If string variable = "Hello", |- |S#7||Go to line number 7. |- |P!You didn't type in "Hello"!||Else, print text. |- |ND||Exit |- |P!You typed in "Hello"!||Print text |- |ND||Exit |} |- |#givennumber||If number variable equals givennumber, execute next instruction. Else, execute instruction after next. Note: This is just like $givenvalue, except a number should be in the givennumber. |} ===Example=== The following example is a very trivial animation program named "Animation Master" in SLOS. It requires the user to hold down a key to switch between two screens to make the user think that the person is talking. <pre> C! P!Animation Master v2.1 P!Version for SL-OS P! I$4Ready for some fun? [Y] [N] Y S#15 y S#15 N S#13 n P!You don't know what you are missing! ND C! P! . . P! . - , I talking! P! --- L#0120 I$2Press [1] for next frame, hold [1] for animation, or [0] to exit. 1 S#25 0 ND C! P! . . P! . - Hello, am ! P! \___/ L#0120 I$2Press [1] for next frame, hold [1] for animation, or [0] to exit. 1 S#15 0 ND </pre> ==Limitations== SLOS's scripting environment contains a large list of limitations, and some are expressed in the following list: *The scripting language is not [http://en.wikipedia.org/wiki/Turing_completeness Turing-complete] *The screen always has a light-blue background with a white foreground *Conditional expressions are only allowed in a few operations *Programs get only one number variable and one string variable, which is a huge limitation for all but trivial programs *Loading and saving data files within a program is limited to saving the program's two variables *Looping can only be done with the only number variable that you have e6d22740f76ff630d234630519e6616439c03a97 File:Slos-installed.png 6 1538 1802 2007-10-08T07:01:41Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Slos-dir.png 6 1539 1804 2007-10-08T07:06:10Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Slos-win.png 6 1540 1807 2007-10-08T07:12:51Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 SLOS-Win 0 1541 1808 2007-10-08T07:18:39Z Stevenlawrance 1 New page: [[Image:Slos-win.png|thumb|450px|Screen shot of the window-based directory listing in SLOS-Win. [http://en.wikipedia.org/wiki/Object_Windows_Library Borland's Window Custom Control library... wikitext text/x-wiki [[Image:Slos-win.png|thumb|450px|Screen shot of the window-based directory listing in SLOS-Win. [http://en.wikipedia.org/wiki/Object_Windows_Library Borland's Window Custom Control library] was used, which provides its look-and-feel]] [[SLOS-DOS|Steven Lawrance's Operating System (SLOS)]], also known briefly as Steven Lawrance's Operating Program (SL-OP), was a small interpreted toy operating environment written in {{Tech:BASIC}} for {{Tech:DOS}}. The primary motivation for writing this was to have an environment that supported [http://en.wikipedia.org/wiki/Long_filename long file names]. This was written in 1993 -- two years before [http://en.wikipedia.org/wiki/Microsoft Microsoft] released native long file name support in a consumer operating system with [http://en.wikipedia.org/wiki/Windows_95 Windows 95]. A small subset of the SLOS commands were implemented in this Windows version. ==Download== '''[https://www.moonlightdesign.org/steve/programs/slosdist1.exe Download SLOS-DOS and SLOS-Win]''' '''[https://www.moonlightdesign.org/steve/programs/sloswin.zip Download SLOS-Win's Source Code]''', a [[SLOS-Win|Windows version of SLOS]] b57226453ec4646d20baa7f726d261bce106334c 1817 1808 2007-10-08T14:45:17Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Slos-win.png|thumb|450px|Screen shot of the window-based directory listing in SLOS-Win. [http://en.wikipedia.org/wiki/Object_Windows_Library Borland's Window Custom Control library] was used, which provides its look-and-feel]] [[SLOS-DOS|Steven Lawrance's Operating System (SLOS)]], also known briefly as Steven Lawrance's Operating Program (SL-OP), was a small interpreted toy operating environment written in {{Tech:BASIC}} for {{Tech:DOS}}. The primary motivation for writing this was to have an environment that supported [http://en.wikipedia.org/wiki/Long_filename long file names]. This was written in 1993 -- two years before [http://en.wikipedia.org/wiki/Microsoft Microsoft] released native long file name support in a consumer operating system with [http://en.wikipedia.org/wiki/Windows_95 Windows 95]. A small subset of the SLOS commands were implemented in this Windows version. Unfortunately, this Windows version cannot run most of the SLOS programs that were written. ==Download== '''[https://www.moonlightdesign.org/steve/programs/slosdist1.exe Download SLOS-DOS and SLOS-Win]''' '''[https://www.moonlightdesign.org/steve/programs/sloswin.zip Download SLOS-Win's Source Code]''', a [[SLOS-Win|Windows version of SLOS]] 9577a833a8a57d26e39a4b59fc0a2980e9bee843 Steven Lawrance 0 1409 1809 1806 2007-10-08T07:20:41Z Stevenlawrance 1 wikitext text/x-wiki Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-17-07'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||20,939||1999-2007 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}|| || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP||{{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}|| || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}|| || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}|| || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk||{{Tech:C}}, {{Tech:Win32}}||650||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing game that I made a long time ago||{{Tech:C}}, {{Tech:Win16}}||3,348||1996-1997 |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || ||1994 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide [http://en.wikipedia.org/wiki/BitBLT bit blit-like] operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces||{{Tech:Java}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 4404352b0697e2dbc46b510c71e267bb69a8a8d2 1810 1809 2007-10-08T07:22:13Z Stevenlawrance 1 wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-17-07'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||20,939||1999-2007 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}|| || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP||{{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}|| || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}|| || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}|| || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk||{{Tech:C}}, {{Tech:Win32}}||650||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing game that I made a long time ago||{{Tech:C}}, {{Tech:Win16}}||3,348||1996-1997 |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || ||1994 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide [http://en.wikipedia.org/wiki/BitBLT bit blit-like] operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces||{{Tech:Java}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 956111c91e3044db28ad8cbd824047553c82efbc 1811 1810 2007-10-08T07:22:34Z Stevenlawrance 1 wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||20,939||1999-2007 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}|| || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP||{{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| || |- |[[ActiveMail]]||Back when I used to do ASP, I wrote a SMTP / POP3 / FTPAuth object so that I could send mail||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}|| || |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}|| || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}|| || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk||{{Tech:C}}, {{Tech:Win32}}||650||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing game that I made a long time ago||{{Tech:C}}, {{Tech:Win16}}||3,348||1996-1997 |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || ||1994 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide [http://en.wikipedia.org/wiki/BitBLT bit blit-like] operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces||{{Tech:Java}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] a74c50562bcde652b9c66128cad86f209f9fe88a 1813 1811 2007-10-08T14:39:59Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||20,939||1999-2007 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}|| || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP||{{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| || |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}|| || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}|| || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk||{{Tech:C}}, {{Tech:Win32}}||650||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing game that I made a long time ago||{{Tech:C}}, {{Tech:Win16}}||3,348||1996-1997 |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || ||1994 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[SLOS-Win]]||Windows-based interpreter for SLOS, a crazy operating environment that I made a while ago||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide [http://en.wikipedia.org/wiki/BitBLT bit blit-like] operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||The original implementation of SLOS and the most correct (the Windows version has some problems)||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces||{{Tech:Java}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] e288cb863c19a83bd3d0a1e1860234cc4c7e65a4 1816 1813 2007-10-08T14:44:37Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||20,939||1999-2007 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}|| || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP||{{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| || |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}|| || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}|| || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk||{{Tech:C}}, {{Tech:Win32}}||650||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing game that I made a long time ago||{{Tech:C}}, {{Tech:Win16}}||3,348||1996-1997 |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || ||1994 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide [http://en.wikipedia.org/wiki/BitBLT bit blit-like] operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces||{{Tech:Java}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 2967d08ce856ba383ee07282ca06fd7aab2bbc00 1818 1816 2007-10-08T14:50:43Z Stevenlawrance 1 wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests Main|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||20,939||1999-2007 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}|| || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP||{{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| || |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}|| || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}|| || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk||{{Tech:C}}, {{Tech:Win32}}||650||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing game that I made a long time ago||{{Tech:C}}, {{Tech:Win16}}||3,348||1996-1997 |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || ||1994 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide [http://en.wikipedia.org/wiki/BitBLT bit blit-like] operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces||{{Tech:Java}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 3e8593c4044557242ecc08138ebe4af36e5196c0 1819 1818 2007-10-08T14:51:08Z Stevenlawrance 1 wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||20,939||1999-2007 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}|| || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP||{{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| || |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}|| || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}|| || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk||{{Tech:C}}, {{Tech:Win32}}||650||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing game that I made a long time ago||{{Tech:C}}, {{Tech:Win16}}||3,348||1996-1997 |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it|| || ||1994 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide [http://en.wikipedia.org/wiki/BitBLT bit blit-like] operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces||{{Tech:Java}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 2727ecf4a118b5f9cd098ce7579696af857de29d 1820 1819 2007-10-09T14:27:12Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||20,939||1999-2007 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}|| || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP||{{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| || |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}|| || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}|| || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk||{{Tech:C}}, {{Tech:Win32}}||650||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing game that I made a long time ago||{{Tech:C}}, {{Tech:Win16}}||3,348||1996-1997 |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs. Includes several example MIDIs that use it||{{Tech:SoundFont}}||0||1994-1995 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide [http://en.wikipedia.org/wiki/BitBLT bit blit-like] operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces||{{Tech:Java}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] f647810a63beb34a363b96fb3dc1a56a199e717f 1822 1820 2007-10-09T14:29:45Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||20,939||1999-2007 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}|| || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP||{{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| || |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}|| || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}|| || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk||{{Tech:C}}, {{Tech:Win32}}||650||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing game that I made a long time ago||{{Tech:C}}, {{Tech:Win16}}||3,348||1996-1997 |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MeowyMIDI]]||A sound font with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 cards||{{Tech:SoundFont}}||0||1994-1995 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide [http://en.wikipedia.org/wiki/BitBLT bit blit-like] operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces||{{Tech:Java}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 195775d65a70e1591c7a152d43c60e81c5113564 1825 1822 2007-10-09T14:35:46Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||20,939||1999-2007 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}|| || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP||{{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| || |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}|| || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}|| || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk||{{Tech:C}}, {{Tech:Win32}}||650||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing game that I made a long time ago||{{Tech:C}}, {{Tech:Win16}}||3,348||1996-1997 |- |[[KittyCat! Comm]]||Communications program with internetworking in mind. This was never finished, but it had some interesting ideas that I later found out existed in TCP/IP||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}||0||1994-1995 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide [http://en.wikipedia.org/wiki/BitBLT bit blit-like] operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces||{{Tech:Java}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 94baa7e571f9694ba6e4d1777ced35dfd1c349d9 1842 1825 2007-10-13T16:11:31Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||20,939||1999-2007 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}|| || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP||{{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| || |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that returns info on the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}|| || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}|| || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk||{{Tech:C}}, {{Tech:Win32}}||650||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing game that I made a long time ago||{{Tech:C}}, {{Tech:Win16}}||3,348||1996-1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}||0||1994-1995 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide [http://en.wikipedia.org/wiki/BitBLT bit blit-like] operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces||{{Tech:Java}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 5d06e9dbccba17ea1e77b7ce1d9145b57fcc30bd 1843 1842 2007-10-13T16:47:46Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||20,939||1999-2007 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}|| || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP||{{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| || |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}|| || |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}|| || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk||{{Tech:C}}, {{Tech:Win32}}||650||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing game that I made a long time ago||{{Tech:C}}, {{Tech:Win16}}||3,348||1996-1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}||0||1994-1995 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide [http://en.wikipedia.org/wiki/BitBLT bit blit-like] operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces||{{Tech:Java}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 5b766b73f3f320692fa27c8c3f7f20d368299c97 1847 1843 2007-10-13T17:44:20Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with DirList2ODBC, the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a SQL-compliant database system within the limits of the DirList2 Server. This project began in January of 1998 (simply "DirList" at that time) and is still updated to this day on occasion. Bryant University continues to use this program for their student web site list||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||20,939||1999-2007 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}|| || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP||{{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| || |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[DirList2ODBC]]||ODBC 2.0-compliant driver written for the DirList2 Server||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}|| || |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk||{{Tech:C}}, {{Tech:Win32}}||650||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing game that I made a long time ago||{{Tech:C}}, {{Tech:Win16}}||3,348||1996-1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}||0||1994-1995 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide [http://en.wikipedia.org/wiki/BitBLT bit blit-like] operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces||{{Tech:Java}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] d48f5e75719c2a27a599c6a9d256ca56d251aa2a 1849 1847 2007-10-13T17:59:22Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}|| || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP||{{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| || |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk||{{Tech:C}}, {{Tech:Win32}}||650||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup16]]||Install/uninstall utility that I made a while ago so that I could distribute my programs easily||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing game that I made a long time ago||{{Tech:C}}, {{Tech:Win16}}||3,348||1996-1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}||0||1994-1995 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide [http://en.wikipedia.org/wiki/BitBLT bit blit-like] operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces||{{Tech:Java}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 029d84dae905b821d009a564aaadfa68b9a4ef39 1850 1849 2007-10-13T18:07:26Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}|| || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at Bryant, I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. Over time, the site moved from static HTML to ASP to PHP||{{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| || |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk||{{Tech:C}}, {{Tech:Win32}}||650||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing game that I made a long time ago||{{Tech:C}}, {{Tech:Win16}}||3,348||1996-1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}||0||1994-1995 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide [http://en.wikipedia.org/wiki/BitBLT bit blit-like] operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces||{{Tech:Java}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 256aa531e3ed15807821f4b2fdbfa68d25af0c85 ActiveMail 0 1542 1812 2007-10-08T14:38:15Z Stevenlawrance 1 New page: [[Image:Program-activemailconsole.png|right|thumb|300px|ActiveMail Console]] ActiveMail is a component object model ({Tech:COM}}) object that provides SMTP email sending, POP3 email downlo... wikitext text/x-wiki [[Image:Program-activemailconsole.png|right|thumb|300px|ActiveMail Console]] ActiveMail is a component object model ({Tech:COM}}) object that provides SMTP email sending, POP3 email downloading, and FTP authentication services. The distribution includes the COM object, its source code, and a {{Tech:VisualBasic}} ActiveMail Console program that lets users easily send mass email messages. ActiveMail Console includes recipient chunking to work around email servers that enforce a maximum number of recipients per email message. This software is ''not'' meant for SPAM, but rather email distribution lists. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/activemail.zip Download the COM object, source code, and ActiveMail Console]''' ==Marketing== While attending [http://www.bryant.edu/ Bryant University], I used ActiveMail as a target for an [https://www.moonlightdesign.org/steve/programs/activemail/index.html academic project in a desktop publishing course]. It makes some claims that ActiveMail does not implement, such as support for an instant message protocol that never materialized, but it's email capabilities hold true. 0a93be544b438443275aecf8aa649ad528a220b3 1814 1812 2007-10-08T14:40:25Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Program-activemailconsole.png|right|thumb|300px|ActiveMail Console]] ActiveMail is a component object model ({{Tech:COM}}) object that provides SMTP email sending, POP3 email downloading, and FTP authentication services. The distribution includes the COM object, its source code, and a {{Tech:VisualBasic}} ActiveMail Console program that lets users easily send mass email messages. ActiveMail Console includes recipient chunking to work around email servers that enforce a maximum number of recipients per email message. This software is ''not'' meant for SPAM, but rather email distribution lists. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/activemail.zip Download the COM object, source code, and ActiveMail Console]''' ==Marketing== While attending [http://www.bryant.edu/ Bryant University], I used ActiveMail as a target for an [https://www.moonlightdesign.org/steve/programs/activemail/index.html academic project in a desktop publishing course]. It makes some claims that ActiveMail does not implement, such as support for an instant message protocol that never materialized, but it's email capabilities hold true. 7319f7fdca6f621fbeef593c3c5239d943fbfc1d 1815 1814 2007-10-08T14:41:29Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Program-activemailconsole.png|right|thumb|300px|ActiveMail Console]] ActiveMail is a component object model ({{Tech:COM}}) object that provides [http://en.wikipedia.org/wiki/Smtp SMTP] email sending, [http://en.wikipedia.org/wiki/Pop3 POP3] email downloading, and [http://en.wikipedia.org/wiki/Ftp FTP] authentication services. The distribution includes the COM object, its source code, and a {{Tech:VisualBasic}} ActiveMail Console program that lets users easily send mass email messages. ActiveMail Console includes recipient chunking to work around email servers that enforce a maximum number of recipients per email message. This software is ''not'' meant for SPAM, but rather email distribution lists. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/activemail.zip Download the COM object, source code, and ActiveMail Console]''' ==Marketing== While attending [http://www.bryant.edu/ Bryant University], I used ActiveMail as a target for an [https://www.moonlightdesign.org/steve/programs/activemail/index.html academic project in a desktop publishing course]. It makes some claims that ActiveMail does not implement, such as support for an instant message protocol that never materialized, but it's email capabilities hold true. f8be2696eb73c127cfef1bd80f0bad31be483acc Template:Tech:SoundFont 10 1543 1821 2007-10-09T14:27:38Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/SoundFont SoundFont] wikitext text/x-wiki [http://en.wikipedia.org/wiki/SoundFont SoundFont] b537a56b88995c3a593c6e2577cdd03a7d9a84e6 MeowyMIDI 0 1544 1823 2007-10-09T14:33:58Z Stevenlawrance 1 New page: MeowyMIDI is a [http://en.wikipedia.org/wiki/SoundFont sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards. It m... wikitext text/x-wiki MeowyMIDI is a [http://en.wikipedia.org/wiki/SoundFont sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards. It may also work on newer Sound Blaster audio cards that support sound font technology. ==Download== '''[https://www.moonlightdesign.org/steve/programs/meowymidi.zip Download MeowyMIDI]''' ==Readme File== If you want to use the SBK file in your own MIDI files, use a MIDI editing program and create a controller fill for the duration of your song on the track you want with 0 and a value range from 3 to 3. Please note that the meow sounds are not in the list of instruments, so you'll need to select the following instruments for the sound you want to use on the track that you performed a controller fill on. {|border="1" !Instrument!!Sound |- |Acoustic Grand Piano||Meow 1 |- |Bright Acoustic Piano||Looping Purr |- |Electric Grand Piano||Purr Part 1 |- |Honky-tonk Piano||Purr Part 2 |- |Rhodes Piano||Meow 2 |} Enjoy MIDIs with meows!! :-) All you need to do is run SETUP.EXE from MS-Windows. c5b682cbbe51f4fdcbe31b1909aa4faaef7e3de3 1824 1823 2007-10-09T14:34:46Z Stevenlawrance 1 wikitext text/x-wiki MeowyMIDI is a [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards. It may also work on newer Sound Blaster audio cards that support sound font technology. ==Download== '''[https://www.moonlightdesign.org/steve/programs/meowymidi.zip Download MeowyMIDI]''' ==Readme File== If you want to use the SBK file in your own MIDI files, use a MIDI editing program and create a controller fill for the duration of your song on the track you want with 0 and a value range from 3 to 3. Please note that the meow sounds are not in the list of instruments, so you'll need to select the following instruments for the sound you want to use on the track that you performed a controller fill on. {|border="1" !Instrument!!Sound |- |Acoustic Grand Piano||Meow 1 |- |Bright Acoustic Piano||Looping Purr |- |Electric Grand Piano||Purr Part 1 |- |Honky-tonk Piano||Purr Part 2 |- |Rhodes Piano||Meow 2 |} Enjoy MIDIs with meows!! :-) All you need to do is run SETUP.EXE from MS-Windows. ac07673b8ee1862d5fa1e7e9d74e2c92e71408c1 File:KittyCatComm-About.png 6 1545 1826 2007-10-13T14:50:52Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:KittyCatComm-ARZ-About.png 6 1546 1827 2007-10-13T14:51:01Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:KittyCatComm-ARZ-RIP.png 6 1547 1828 2007-10-13T14:51:07Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:KittyCatComm-ARZ-Settings.png 6 1548 1829 2007-10-13T14:51:14Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:KittyCatComm-ARZ-Text.png 6 1549 1830 2007-10-13T14:51:20Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:KittyCatComm-BBSConfig.png 6 1550 1831 2007-10-13T14:51:28Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:KittyCatComm-BBSOptions.png 6 1551 1832 2007-10-13T14:51:35Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:KittyCatComm-ModemConfig.png 6 1552 1833 2007-10-13T14:51:42Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:KittyCatComm-Preferences.png 6 1553 1834 2007-10-13T14:51:47Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:KittyCatComm-KittyDDE.png 6 1554 1835 2007-10-13T14:59:57Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 KittyCat! Comm 0 1555 1836 2007-10-13T15:30:22Z Stevenlawrance 1 New page: [[Image:KittyCatComm-About.png|right|thumb|350px|The "about" window in KittyCat! Comm 1.0. Clicking on the cat picture causes the window to "meow" on systems with audio capabilities]] Kitt... wikitext text/x-wiki [[Image:KittyCatComm-About.png|right|thumb|350px|The "about" window in KittyCat! Comm 1.0. Clicking on the cat picture causes the window to "meow" on systems with audio capabilities]] KittyCat! Comm was a [http://en.wikipedia.org/wiki/Bulletin_board_system bulletin board system (BBS)] communication program for [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1] with ambitious plans. The vision was to support traditional text-based BBS systems and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics] along with arbitrary data exchange between remote programs. This project was abandoned shortly after I started using the [http://en.wikipedia.org/wiki/Internet Internet] and [http://en.wikipedia.org/wiki/Internet_protocol_suite TCP/IP]; they made KittyCat! Comm obsolete. The implementation supports multiple telephone numbers per BBS, inter-program communication using the [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] mechanism in [http://en.wikipedia.org/wiki/Microsoft_Windows Windows], [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics] rendering in its console, and a partially-implemented MeowModem file transfer program. Almost every part of the system has [http://en.wikipedia.org/wiki/Cat cat]-themed names, such as its KittyDDE application programming interface (API). ==Dialing Directory== The dialing directory was implemented using minimized [http://en.wikipedia.org/wiki/Multiple_document_interface multiple document interface (MDI)] windows, which appear as icons with a title underneath on [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1]. This was meant to make BBSes appear as programs as they did in the Windows [http://en.wikipedia.org/wiki/Program_Manager Program Manager]. In [http://en.wikipedia.org/wiki/Windows_95 Windows 95] and later versions, minimized MDI windows appear as small title bars with control icons, making the dialing directory's user interface appear drastically different. ==Terminal Console== ae52adf6d556b785052b8acafe6afa0e2a1ffaf4 1837 1836 2007-10-13T15:45:40Z Stevenlawrance 1 wikitext text/x-wiki [[Image:KittyCatComm-About.png|right|thumb|350px|The "about" window in KittyCat! Comm 1.0. Clicking on the cat picture causes the window to "meow" on systems with audio capabilities]] KittyCat! Comm was a [http://en.wikipedia.org/wiki/Bulletin_board_system bulletin board system (BBS)] communication program for [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1] with ambitious plans. The vision was to support traditional text-based BBS systems and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics] along with arbitrary data exchange between remote programs and BBS-driven [[SLOS-DOS|SLOS scripting]]. This project was abandoned shortly after I started using the [http://en.wikipedia.org/wiki/Internet Internet] and [http://en.wikipedia.org/wiki/Internet_protocol_suite TCP/IP]; they made KittyCat! Comm obsolete. The implementation supports multiple telephone numbers per BBS, inter-program communication using the [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] mechanism in [http://en.wikipedia.org/wiki/Microsoft_Windows Windows], [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics] rendering in its console, and a partially-implemented MeowModem file transfer program. Almost every part of the system has [http://en.wikipedia.org/wiki/Cat cat]-themed names, such as its KittyDDE application programming interface (API). ==Dialing Directory== The dialing directory was implemented using minimized [http://en.wikipedia.org/wiki/Multiple_document_interface multiple document interface (MDI)] windows, which appear as icons with a title underneath on [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1]. This was meant to make BBSes appear as programs as they did in the Windows [http://en.wikipedia.org/wiki/Program_Manager Program Manager]. In [http://en.wikipedia.org/wiki/Windows_95 Windows 95] and later versions, minimized MDI windows appear as small title bars with control icons, making the dialing directory's user interface appear drastically different. {| |[[Image:Program-kittycatcomm.png|thumb|400px|none|The dialing directory as it appears on a [http://en.wikipedia.org/wiki/Windows_nt_4 Windows NT 4] system]] |[[Image:KittyCatComm-BBSOptions.png|thumb|200px|none|The BBS options page, which appears when a BBS is double-clicked on or "restored" via MDI]] |- |[[Image:KittyCatComm-BBSConfig.png|thumb|300px|none|The properties page for a BBS. The horizontal scrollbar navigates through the BBS's telephone numbers]] |[[Image:KittyCatComm-ModemConfig.png|thumb|300px|none|The modem strings configuration dialog box]] |- |[[Image:KittyCatComm-Preferences.png|thumb|300px|none|The serial device and modem properties page]] |[[Image:KittyCatComm-KittyDDE.png|thumb|200px|none|Output from the KittyDDE diagnostics tool]] |} ==Terminal Console== efbacbe70a6cc87dc0e3acb3635a585b18f998f3 1838 1837 2007-10-13T15:59:57Z Stevenlawrance 1 wikitext text/x-wiki [[Image:KittyCatComm-About.png|right|thumb|350px|The "about" window in KittyCat! Comm 1.0. Clicking on the cat picture causes the window to "meow" on systems with audio capabilities]] KittyCat! Comm was a [http://en.wikipedia.org/wiki/Bulletin_board_system bulletin board system (BBS)] communication program for [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1] with ambitious plans. The vision was to support traditional text-based BBS systems and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics] along with arbitrary data exchange between remote programs and BBS-driven [[SLOS-DOS|SLOS scripting]]. This project was abandoned shortly after I started using the [http://en.wikipedia.org/wiki/Internet Internet] and [http://en.wikipedia.org/wiki/Internet_protocol_suite TCP/IP]; they made KittyCat! Comm obsolete. The implementation supports multiple telephone numbers per BBS, inter-program communication using the [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] mechanism in [http://en.wikipedia.org/wiki/Microsoft_Windows Windows], [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics] rendering in its console, and a partially-implemented MeowModem file transfer program. Almost every part of the system has [http://en.wikipedia.org/wiki/Cat cat]-themed names, such as its KittyDDE application programming interface (API). ==Dialing Directory== The dialing directory was implemented using minimized [http://en.wikipedia.org/wiki/Multiple_document_interface multiple document interface (MDI)] windows, which appear as icons with a title underneath on [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1]. This was meant to make BBSes appear as programs as they did in the Windows [http://en.wikipedia.org/wiki/Program_Manager Program Manager]. In [http://en.wikipedia.org/wiki/Windows_95 Windows 95] and later versions, minimized MDI windows appear as small title bars with control icons, making the dialing directory's user interface appear drastically different. {| |[[Image:Program-kittycatcomm.png|thumb|400px|none|The dialing directory as it appears on a [http://en.wikipedia.org/wiki/Windows_nt_4 Windows NT 4] system]] |[[Image:KittyCatComm-BBSOptions.png|thumb|200px|none|The BBS options page, which appears when a BBS is double-clicked on or "restored" via MDI]] |- |[[Image:KittyCatComm-BBSConfig.png|thumb|300px|none|The properties page for a BBS. The horizontal scrollbar navigates through the BBS's telephone numbers]] |[[Image:KittyCatComm-ModemConfig.png|thumb|300px|none|The modem strings configuration dialog box]] |- |[[Image:KittyCatComm-Preferences.png|thumb|300px|none|The serial device and modem properties page]] |[[Image:KittyCatComm-KittyDDE.png|thumb|200px|none|Output from the KittyDDE diagnostics tool]] |} ==Terminal Console== The terminal console appears after a successful connection to a BBS is made. It can also be launched while KittyCat! Comm is not running, which puts the console into [http://en.wikipedia.org/wiki/Echo_%28computing%29 local-echo] mode. Support for ANSI and partial support for RIPscrip exists in the implementation, though [http://en.wikipedia.org/wiki/ZMODEM Zmodem] file transfer support was never finished. {| |[[Image:KittyCatComm-ARZ-Text.png|thumb|400px|none|ANSI text]] |[[Image:KittyCatComm-ARZ-Settings.png|thumb|300px|none|Console preferences dialog box. The default color palette in Windows 3.1 did not include a good brown color, so this console implements its own in its palette and calls it TrueBrown]] |- |[[Image:KittyCatComm-ARZ-RIP.png|thumb|400px|none|RIPscrip graphics test]] |[[Image:KittyCatComm-ARZ-About.png|thumb|300px|none|The "about" dialog box]] |} 00231c49a0ac3ce6bfe29c9f1246ba4cad5f7bf8 1839 1838 2007-10-13T16:01:43Z Stevenlawrance 1 /* Terminal Console */ wikitext text/x-wiki [[Image:KittyCatComm-About.png|right|thumb|350px|The "about" window in KittyCat! Comm 1.0. Clicking on the cat picture causes the window to "meow" on systems with audio capabilities]] KittyCat! Comm was a [http://en.wikipedia.org/wiki/Bulletin_board_system bulletin board system (BBS)] communication program for [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1] with ambitious plans. The vision was to support traditional text-based BBS systems and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics] along with arbitrary data exchange between remote programs and BBS-driven [[SLOS-DOS|SLOS scripting]]. This project was abandoned shortly after I started using the [http://en.wikipedia.org/wiki/Internet Internet] and [http://en.wikipedia.org/wiki/Internet_protocol_suite TCP/IP]; they made KittyCat! Comm obsolete. The implementation supports multiple telephone numbers per BBS, inter-program communication using the [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] mechanism in [http://en.wikipedia.org/wiki/Microsoft_Windows Windows], [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics] rendering in its console, and a partially-implemented MeowModem file transfer program. Almost every part of the system has [http://en.wikipedia.org/wiki/Cat cat]-themed names, such as its KittyDDE application programming interface (API). ==Dialing Directory== The dialing directory was implemented using minimized [http://en.wikipedia.org/wiki/Multiple_document_interface multiple document interface (MDI)] windows, which appear as icons with a title underneath on [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1]. This was meant to make BBSes appear as programs as they did in the Windows [http://en.wikipedia.org/wiki/Program_Manager Program Manager]. In [http://en.wikipedia.org/wiki/Windows_95 Windows 95] and later versions, minimized MDI windows appear as small title bars with control icons, making the dialing directory's user interface appear drastically different. {| |[[Image:Program-kittycatcomm.png|thumb|400px|none|The dialing directory as it appears on a [http://en.wikipedia.org/wiki/Windows_nt_4 Windows NT 4] system]] |[[Image:KittyCatComm-BBSOptions.png|thumb|200px|none|The BBS options page, which appears when a BBS is double-clicked on or "restored" via MDI]] |- |[[Image:KittyCatComm-BBSConfig.png|thumb|300px|none|The properties page for a BBS. The horizontal scrollbar navigates through the BBS's telephone numbers]] |[[Image:KittyCatComm-ModemConfig.png|thumb|300px|none|The modem strings configuration dialog box]] |- |[[Image:KittyCatComm-Preferences.png|thumb|300px|none|The serial device and modem properties page]] |[[Image:KittyCatComm-KittyDDE.png|thumb|200px|none|Output from the KittyDDE diagnostics tool]] |} ==Terminal Console== The terminal console appears after a successful connection to a BBS is made. It can also be launched while KittyCat! Comm is not running, which puts the console into [http://en.wikipedia.org/wiki/Echo_%28computing%29 local-echo] mode. Support for ANSI and partial support for RIPscrip exists in the implementation, though [http://en.wikipedia.org/wiki/ZMODEM Zmodem] file transfer support was never finished. {| |[[Image:KittyCatComm-ARZ-Text.png|thumb|400px|none|ANSI text]] |[[Image:KittyCatComm-ARZ-Settings.png|thumb|300px|none|Console preferences dialog box. The default [http://en.wikipedia.org/wiki/Palette_%28computing%29 color palette] in Windows 3.1 did not include a good brown color, so this console implements its own in its palette and calls it TrueBrown]] |- |[[Image:KittyCatComm-ARZ-RIP.png|thumb|400px|none|RIPscrip graphics test]] |[[Image:KittyCatComm-ARZ-About.png|thumb|300px|none|The "about" dialog box]] |} 74b29f66845f5672db77b01d0ae51efa3e3d3258 1840 1839 2007-10-13T16:03:43Z Stevenlawrance 1 /* Terminal Console */ wikitext text/x-wiki [[Image:KittyCatComm-About.png|right|thumb|350px|The "about" window in KittyCat! Comm 1.0. Clicking on the cat picture causes the window to "meow" on systems with audio capabilities]] KittyCat! Comm was a [http://en.wikipedia.org/wiki/Bulletin_board_system bulletin board system (BBS)] communication program for [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1] with ambitious plans. The vision was to support traditional text-based BBS systems and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics] along with arbitrary data exchange between remote programs and BBS-driven [[SLOS-DOS|SLOS scripting]]. This project was abandoned shortly after I started using the [http://en.wikipedia.org/wiki/Internet Internet] and [http://en.wikipedia.org/wiki/Internet_protocol_suite TCP/IP]; they made KittyCat! Comm obsolete. The implementation supports multiple telephone numbers per BBS, inter-program communication using the [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] mechanism in [http://en.wikipedia.org/wiki/Microsoft_Windows Windows], [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics] rendering in its console, and a partially-implemented MeowModem file transfer program. Almost every part of the system has [http://en.wikipedia.org/wiki/Cat cat]-themed names, such as its KittyDDE application programming interface (API). ==Dialing Directory== The dialing directory was implemented using minimized [http://en.wikipedia.org/wiki/Multiple_document_interface multiple document interface (MDI)] windows, which appear as icons with a title underneath on [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1]. This was meant to make BBSes appear as programs as they did in the Windows [http://en.wikipedia.org/wiki/Program_Manager Program Manager]. In [http://en.wikipedia.org/wiki/Windows_95 Windows 95] and later versions, minimized MDI windows appear as small title bars with control icons, making the dialing directory's user interface appear drastically different. {| |[[Image:Program-kittycatcomm.png|thumb|400px|none|The dialing directory as it appears on a [http://en.wikipedia.org/wiki/Windows_nt_4 Windows NT 4] system]] |[[Image:KittyCatComm-BBSOptions.png|thumb|200px|none|The BBS options page, which appears when a BBS is double-clicked on or "restored" via MDI]] |- |[[Image:KittyCatComm-BBSConfig.png|thumb|300px|none|The properties page for a BBS. The horizontal scrollbar navigates through the BBS's telephone numbers]] |[[Image:KittyCatComm-ModemConfig.png|thumb|300px|none|The modem strings configuration dialog box]] |- |[[Image:KittyCatComm-Preferences.png|thumb|300px|none|The serial device and modem properties page]] |[[Image:KittyCatComm-KittyDDE.png|thumb|200px|none|Output from the KittyDDE diagnostics tool]] |} ==Terminal Console== The terminal console appears after a successful connection to a BBS is made. It can also be launched while KittyCat! Comm is not running, which puts the console into [http://en.wikipedia.org/wiki/Echo_%28computing%29 local-echo] mode. Support for ANSI and partial support for RIPscrip exists in the implementation, though [http://en.wikipedia.org/wiki/ZMODEM Zmodem] file transfer support was never finished. {| |[[Image:KittyCatComm-ARZ-Text.png|thumb|400px|none|ANSI text]] |[[Image:KittyCatComm-ARZ-Settings.png|thumb|300px|none|Console preferences dialog box. The default 20-color [http://en.wikipedia.org/wiki/Palette_%28computing%29 palette] in Windows 3.1 did not include a good brown color, so this console implements its own in its palette and calls it TrueBrown]] |- |[[Image:KittyCatComm-ARZ-RIP.png|thumb|400px|none|RIPscrip graphics test]] |[[Image:KittyCatComm-ARZ-About.png|thumb|300px|none|The "about" dialog box]] |} ccba3abb8ce0f471f4f3d89e608e2c8c97163866 1841 1840 2007-10-13T16:07:31Z Stevenlawrance 1 wikitext text/x-wiki [[Image:KittyCatComm-About.png|right|thumb|350px|The "about" window in KittyCat! Comm 1.0. Clicking on the cat picture causes the window to "meow" on systems with audio capabilities]] KittyCat! Comm was a [http://en.wikipedia.org/wiki/Bulletin_board_system bulletin board system (BBS)] communication program for [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1] with ambitious plans. The vision was to support traditional text-based BBS systems and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics] along with arbitrary data exchange between remote programs and BBS-driven [[SLOS-DOS|SLOS scripting]]. This project was abandoned shortly after I started using the [http://en.wikipedia.org/wiki/Internet Internet] and [http://en.wikipedia.org/wiki/Internet_protocol_suite TCP/IP]; they made KittyCat! Comm obsolete. The implementation supports multiple telephone numbers per BBS, inter-program communication using the [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] mechanism in [http://en.wikipedia.org/wiki/Microsoft_Windows Windows], [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics] rendering in its console, and a partially-implemented MeowModem file transfer program. Almost every part of the system has [http://en.wikipedia.org/wiki/Cat cat]-themed names, such as its KittyDDE application programming interface (API). ==Download== *'''[https://www.moonlightdesign.org/steve/programs/kittycatcomm.zip Download KittyCat! Comm and its source code]''' *'''[https://www.moonlightdesign.org/steve/programs/kittycatcomm.exe Download the KittyCat! Comm installer]''', which does not appear to work properly in neither [http://en.wikipedia.org/wiki/Windows_xp Windows XP] nor [http://en.wikipedia.org/wiki/Wine_%28software%29 Wine]. Download the [https://www.moonlightdesign.org/steve/programs/kittycatcomm.zip zip file] instead unless if you are using Windows 3.1 ==Dialing Directory== The dialing directory was implemented using minimized [http://en.wikipedia.org/wiki/Multiple_document_interface multiple document interface (MDI)] windows, which appear as icons with a title underneath on [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1]. This was meant to make BBSes appear as programs as they did in the Windows [http://en.wikipedia.org/wiki/Program_Manager Program Manager]. In [http://en.wikipedia.org/wiki/Windows_95 Windows 95] and later versions, minimized MDI windows appear as small title bars with control icons, making the dialing directory's user interface appear drastically different. {| |[[Image:Program-kittycatcomm.png|thumb|400px|none|The dialing directory as it appears on a [http://en.wikipedia.org/wiki/Windows_nt_4 Windows NT 4] system]] |[[Image:KittyCatComm-BBSOptions.png|thumb|200px|none|The BBS options page, which appears when a BBS is double-clicked on or "restored" via MDI]] |- |[[Image:KittyCatComm-BBSConfig.png|thumb|300px|none|The properties page for a BBS. The horizontal scrollbar navigates through the BBS's telephone numbers]] |[[Image:KittyCatComm-ModemConfig.png|thumb|300px|none|The modem strings configuration dialog box]] |- |[[Image:KittyCatComm-Preferences.png|thumb|300px|none|The serial device and modem properties page]] |[[Image:KittyCatComm-KittyDDE.png|thumb|200px|none|Output from the KittyDDE diagnostics tool]] |} ==Terminal Console== The terminal console appears after a successful connection to a BBS is made. It can also be launched while KittyCat! Comm is not running, which puts the console into [http://en.wikipedia.org/wiki/Echo_%28computing%29 local-echo] mode. Support for ANSI and partial support for RIPscrip exists in the implementation, though [http://en.wikipedia.org/wiki/ZMODEM Zmodem] file transfer support was never finished. {| |[[Image:KittyCatComm-ARZ-Text.png|thumb|400px|none|ANSI text]] |[[Image:KittyCatComm-ARZ-Settings.png|thumb|300px|none|Console preferences dialog box. The default 20-color [http://en.wikipedia.org/wiki/Palette_%28computing%29 palette] in Windows 3.1 did not include a good brown color, so this console implements its own in its palette and calls it TrueBrown]] |- |[[Image:KittyCatComm-ARZ-RIP.png|thumb|400px|none|RIPscrip graphics test]] |[[Image:KittyCatComm-ARZ-About.png|thumb|300px|none|The "about" dialog box]] |} 67ad9f937819bf2c18fffdf9b28b8550f99bb738 1855 1841 2007-10-13T18:58:17Z Stevenlawrance 1 wikitext text/x-wiki [[Image:KittyCatComm-About.png|right|thumb|350px|The "about" window in KittyCat! Comm 1.0. Clicking on the cat picture causes the window to "meow" on systems with audio capabilities]] KittyCat! Comm was a [http://en.wikipedia.org/wiki/Bulletin_board_system bulletin board system (BBS)] communication program for [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1] with ambitious plans. The vision was to support traditional text-based BBS systems and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics] along with arbitrary data exchange between remote programs and BBS-driven [[SLOS-DOS|SLOS scripting]]. This project was abandoned shortly after I started using the [http://en.wikipedia.org/wiki/Internet Internet] and [http://en.wikipedia.org/wiki/Internet_protocol_suite TCP/IP]; they made KittyCat! Comm obsolete. The implementation supports multiple telephone numbers per BBS, inter-program communication using the [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] mechanism in [http://en.wikipedia.org/wiki/Microsoft_Windows Windows], [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics] rendering in its console, and a partially-implemented MeowModem file transfer program. Almost every part of the system has [http://en.wikipedia.org/wiki/Cat cat]-themed names, such as its KittyDDE application programming interface (API). ==Download== *'''[https://www.moonlightdesign.org/steve/programs/kittycatcomm.zip Download KittyCat! Comm and its source code]''' *'''[https://www.moonlightdesign.org/steve/programs/kittycatcomm.exe Download the KittyCat! Comm installer]''', which does not appear to work properly in [http://en.wikipedia.org/wiki/Windows_xp Windows XP] and [http://en.wikipedia.org/wiki/Wine_%28software%29 Wine]. Download the [https://www.moonlightdesign.org/steve/programs/kittycatcomm.zip zip file] instead unless if you are using Windows 3.1 ==Dialing Directory== The dialing directory was implemented using minimized [http://en.wikipedia.org/wiki/Multiple_document_interface multiple document interface (MDI)] windows, which appear as icons with a title underneath on [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1]. This was meant to make BBSes appear as programs as they did in the Windows [http://en.wikipedia.org/wiki/Program_Manager Program Manager]. In [http://en.wikipedia.org/wiki/Windows_95 Windows 95] and later versions, minimized MDI windows appear as small title bars with control icons, making the dialing directory's user interface appear drastically different. {| |[[Image:Program-kittycatcomm.png|thumb|400px|none|The dialing directory as it appears on a [http://en.wikipedia.org/wiki/Windows_nt_4 Windows NT 4] system]] |[[Image:KittyCatComm-BBSOptions.png|thumb|200px|none|The BBS options page, which appears when a BBS is double-clicked on or "restored" via MDI]] |- |[[Image:KittyCatComm-BBSConfig.png|thumb|300px|none|The properties page for a BBS. The horizontal scrollbar navigates through the BBS's telephone numbers]] |[[Image:KittyCatComm-ModemConfig.png|thumb|300px|none|The modem strings configuration dialog box]] |- |[[Image:KittyCatComm-Preferences.png|thumb|300px|none|The serial device and modem properties page]] |[[Image:KittyCatComm-KittyDDE.png|thumb|200px|none|Output from the KittyDDE diagnostics tool]] |} ==Terminal Console== The terminal console appears after a successful connection to a BBS is made. It can also be launched while KittyCat! Comm is not running, which puts the console into [http://en.wikipedia.org/wiki/Echo_%28computing%29 local-echo] mode. Support for ANSI and partial support for RIPscrip exists in the implementation, though [http://en.wikipedia.org/wiki/ZMODEM Zmodem] file transfer support was never finished. {| |[[Image:KittyCatComm-ARZ-Text.png|thumb|400px|none|ANSI text]] |[[Image:KittyCatComm-ARZ-Settings.png|thumb|300px|none|Console preferences dialog box. The default 20-color [http://en.wikipedia.org/wiki/Palette_%28computing%29 palette] in Windows 3.1 did not include a good brown color, so this console implements its own in its palette and calls it TrueBrown]] |- |[[Image:KittyCatComm-ARZ-RIP.png|thumb|400px|none|RIPscrip graphics test]] |[[Image:KittyCatComm-ARZ-About.png|thumb|300px|none|The "about" dialog box]] |} 135c3441c8cfee0a4ee07aabc2e1af6b11b6685c 1856 1855 2007-10-13T19:01:42Z Stevenlawrance 1 /* Dialing Directory */ wikitext text/x-wiki [[Image:KittyCatComm-About.png|right|thumb|350px|The "about" window in KittyCat! Comm 1.0. Clicking on the cat picture causes the window to "meow" on systems with audio capabilities]] KittyCat! Comm was a [http://en.wikipedia.org/wiki/Bulletin_board_system bulletin board system (BBS)] communication program for [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1] with ambitious plans. The vision was to support traditional text-based BBS systems and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics] along with arbitrary data exchange between remote programs and BBS-driven [[SLOS-DOS|SLOS scripting]]. This project was abandoned shortly after I started using the [http://en.wikipedia.org/wiki/Internet Internet] and [http://en.wikipedia.org/wiki/Internet_protocol_suite TCP/IP]; they made KittyCat! Comm obsolete. The implementation supports multiple telephone numbers per BBS, inter-program communication using the [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] mechanism in [http://en.wikipedia.org/wiki/Microsoft_Windows Windows], [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics] rendering in its console, and a partially-implemented MeowModem file transfer program. Almost every part of the system has [http://en.wikipedia.org/wiki/Cat cat]-themed names, such as its KittyDDE application programming interface (API). ==Download== *'''[https://www.moonlightdesign.org/steve/programs/kittycatcomm.zip Download KittyCat! Comm and its source code]''' *'''[https://www.moonlightdesign.org/steve/programs/kittycatcomm.exe Download the KittyCat! Comm installer]''', which does not appear to work properly in [http://en.wikipedia.org/wiki/Windows_xp Windows XP] and [http://en.wikipedia.org/wiki/Wine_%28software%29 Wine]. Download the [https://www.moonlightdesign.org/steve/programs/kittycatcomm.zip zip file] instead unless if you are using Windows 3.1 ==Dialing Directory== The dialing directory was implemented using minimized [http://en.wikipedia.org/wiki/Multiple_document_interface multiple document interface (MDI)] windows, which appear as icons with a title underneath on [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1]. This was meant to make BBSes appear as programs as they did in the Windows [http://en.wikipedia.org/wiki/Program_Manager Program Manager]. In [http://en.wikipedia.org/wiki/Windows_95 Windows 95] and later versions, minimized MDI windows appear as small title bars with control icons, making the dialing directory's user interface appear drastically different. {| |[[Image:Program-kittycatcomm.png|thumb|400px|none|The dialing directory as it appears on a [http://en.wikipedia.org/wiki/Windows_95 Windows 95] system]] |[[Image:KittyCatComm-BBSOptions.png|thumb|200px|none|The BBS options page, which appears when a BBS is double-clicked on or "restored" via MDI]] |- |[[Image:KittyCatComm-BBSConfig.png|thumb|300px|none|The properties page for a BBS. The horizontal scrollbar navigates through the BBS's telephone numbers]] |[[Image:KittyCatComm-ModemConfig.png|thumb|300px|none|The modem strings configuration dialog box]] |- |[[Image:KittyCatComm-Preferences.png|thumb|300px|none|The serial device and modem properties page]] |[[Image:KittyCatComm-KittyDDE.png|thumb|200px|none|Output from the KittyDDE diagnostics tool]] |} ==Terminal Console== The terminal console appears after a successful connection to a BBS is made. It can also be launched while KittyCat! Comm is not running, which puts the console into [http://en.wikipedia.org/wiki/Echo_%28computing%29 local-echo] mode. Support for ANSI and partial support for RIPscrip exists in the implementation, though [http://en.wikipedia.org/wiki/ZMODEM Zmodem] file transfer support was never finished. {| |[[Image:KittyCatComm-ARZ-Text.png|thumb|400px|none|ANSI text]] |[[Image:KittyCatComm-ARZ-Settings.png|thumb|300px|none|Console preferences dialog box. The default 20-color [http://en.wikipedia.org/wiki/Palette_%28computing%29 palette] in Windows 3.1 did not include a good brown color, so this console implements its own in its palette and calls it TrueBrown]] |- |[[Image:KittyCatComm-ARZ-RIP.png|thumb|400px|none|RIPscrip graphics test]] |[[Image:KittyCatComm-ARZ-About.png|thumb|300px|none|The "about" dialog box]] |} f70789dcc890e81fd2ad29e7ba4b9b40b37cc919 File:CpuID.png 6 1556 1844 2007-10-13T16:58:38Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 CPU ID 0 1557 1845 2007-10-13T17:00:15Z Stevenlawrance 1 New page: [[Image:CpuID.png|frame|right|CPU ID's output dialog box]] CPU ID is a very simple program that displays information about the CPU that it happens to execute on ==Download== *'''[https://... wikitext text/x-wiki [[Image:CpuID.png|frame|right|CPU ID's output dialog box]] CPU ID is a very simple program that displays information about the CPU that it happens to execute on ==Download== *'''[https://www.moonlightdesign.org/steve/programs/cpuid.exe Download CPU ID]''' e2fa832d7090a071c6876a4c45aac25626678226 1846 1845 2007-10-13T17:02:31Z Stevenlawrance 1 wikitext text/x-wiki [[Image:CpuID.png|frame|right|CPU ID's output dialog box, displaying information about an [http://en.wikipedia.org/wiki/Core2_duo Intel Core2 Duo CPU]]] CPU ID is a very simple program that displays information about the CPU that it happens to execute on ==Download== *'''[https://www.moonlightdesign.org/steve/programs/cpuid.exe Download CPU ID]''' 76c31d60efc2d1b08320319bc158aca87ed8b941 1848 1846 2007-10-13T17:45:44Z Stevenlawrance 1 wikitext text/x-wiki [[Image:CpuID.png|frame|right|CPU ID's output dialog box, displaying information about an [http://en.wikipedia.org/wiki/Core2_duo Intel Core2 Duo CPU]]] CPU ID is a very simple program that displays information about the CPU that it happens to execute on ==Download== *'''[https://www.moonlightdesign.org/steve/programs/cpuid.exe Download CPU ID]''' *'''[https://www.moonlightdesign.org/steve/programs/cpuid.zip Download CPU ID's Source Code]''' e959cd3fb25dfee4a3a420a614a7a5b829c67a36 CatSetup 0 1558 1851 2007-10-13T18:32:11Z Stevenlawrance 1 New page: [[Image:Program-catsetup.png|thumb|right|300px|CatSetup's [http://en.wikipedia.org/wiki/Splash_screen splash screen]]] CatSetup was a scriptable [http://en.wikipedia.org/wiki/Windows_3.1 1... wikitext text/x-wiki [[Image:Program-catsetup.png|thumb|right|300px|CatSetup's [http://en.wikipedia.org/wiki/Splash_screen splash screen]]] CatSetup was a scriptable [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] [http://en.wikipedia.org/wiki/Installation_%28computer_programs%29 installer] and [http://en.wikipedia.org/wiki/Uninstaller uninstaller] that was primarily used to distribute [[Steven Lawrance#Software that I created|my software programs]]. It supports installation from multiple media types, including [http://en.wikipedia.org/wiki/Cd-rom CD-ROMs], one or more [http://en.wikipedia.org/wiki/Floppy_disk floppy disks], [http://en.wikipedia.org/wiki/Hard_drive hard drives], mounted network drives, and single-file [http://en.wikipedia.org/wiki/New_Executable EXE] downloads over the Internet. CatSetup's [http://en.wikipedia.org/wiki/Scripting_language scripting language] is named KittyScript, continuing the [http://en.wikipedia.org/wiki/Cat cat] theme of most of my early software. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/catsetupdocs.exe Download the CatSetup distribution]''', which includes the [https://www.moonlightdesign.org/steve/programs/catsetup/default.htm documentation] *'''[https://www.moonlightdesign.org/steve/programs/catsetup/default.htm View CatSetup's documentation]''' ==Limitations== As a {{Tech:Win16}} program, CatSetup cannot handle [http://en.wikipedia.org/wiki/Long_file_name long file names] without the help of [http://en.wikipedia.org/wiki/Batch_file batch files] in the install process to rename short file names to long file names. This also means that CatSetup does not give access to any {{Tech:Win32}} functionality, such as the [http://en.wikipedia.org/wiki/Windows_Registry registry]. Installing files from a resource inside the installer's EXE file might write out a small amount of unknown memory contents at the end of the file when [http://en.wikipedia.org/wiki/Wine_%28software%29 Wine] is used to run CatSetup, and this might also happen in Windows when the resource is not compressed. This bug was never fixed due to me abandoning CatSetup for {{Tech:Win32}}-based installers. f4479b835c4245b1254e99ee87bdacab323fb12c 1852 1851 2007-10-13T18:36:13Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Program-catsetup.png|thumb|right|300px|CatSetup's [http://en.wikipedia.org/wiki/Splash_screen splash screen]]] CatSetup was a scriptable [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] [http://en.wikipedia.org/wiki/Installation_%28computer_programs%29 installer] and [http://en.wikipedia.org/wiki/Uninstaller uninstaller] primarily used to distribute [[Steven Lawrance#Software that I created|my software programs]]. It supports installation from multiple media types, including [http://en.wikipedia.org/wiki/Cd-rom CD-ROMs], one or more [http://en.wikipedia.org/wiki/Floppy_disk floppy disks], [http://en.wikipedia.org/wiki/Hard_drive hard drives], mounted network drives, and single-file [http://en.wikipedia.org/wiki/New_Executable EXE] downloads over the Internet. CatSetup's [http://en.wikipedia.org/wiki/Scripting_language scripting language] is named KittyScript, continuing the [http://en.wikipedia.org/wiki/Cat cat] theme of most of my early software. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/catsetupdocs.exe Download the CatSetup distribution]''', which includes the [https://www.moonlightdesign.org/steve/programs/catsetup/default.htm documentation] *'''[https://www.moonlightdesign.org/steve/programs/catsetup/default.htm View CatSetup's documentation]''' ==Limitations== As a {{Tech:Win16}} program, CatSetup cannot handle [http://en.wikipedia.org/wiki/Long_file_name long file names] without the help of [http://en.wikipedia.org/wiki/Batch_file batch files] in the install process to rename short file names to long file names. This also means that CatSetup does not give access to any {{Tech:Win32}} functionality, such as the [http://en.wikipedia.org/wiki/Windows_Registry registry]. Installing files from a resource inside the installer's EXE file might write out a small amount of unknown memory contents at the end of the file when [http://en.wikipedia.org/wiki/Wine_%28software%29 Wine] is used to run CatSetup, and this might also happen in Windows when the resource is not compressed. This bug was never fixed due to me abandoning CatSetup for {{Tech:Win32}}-based installers. ed92daaabd53f50ba7af21d2f0e414d8c7738e1f 1853 1852 2007-10-13T18:48:24Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Program-catsetup.png|thumb|right|300px|CatSetup's [http://en.wikipedia.org/wiki/Splash_screen splash screen]]] CatSetup was a scriptable [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] [http://en.wikipedia.org/wiki/Installation_%28computer_programs%29 installer] and [http://en.wikipedia.org/wiki/Uninstaller uninstaller] primarily used to distribute [[Steven Lawrance#Software that I created|my software programs]]. It supports installation from multiple media types, including [http://en.wikipedia.org/wiki/Cd-rom CD-ROMs], one or more [http://en.wikipedia.org/wiki/Floppy_disk floppy disks], [http://en.wikipedia.org/wiki/Hard_drive hard drives], mounted network drives, and single-file [http://en.wikipedia.org/wiki/New_Executable EXE] downloads over the Internet. Installer size minimization and multitasking maximization were the primary quality attributes considered during CatSetup's construction. By making CatSetup's disk footprint as small as possible, programs distributed using CatSetup could be downloaded more easily through through [http://en.wikipedia.org/wiki/Bulletin_board_system bulletin board systems (BBS)], which were prevalent in the mid-1990s. The disk footprint of CatSetup 1.9 -- the final version -- is 96,946 bytes, which is less than the size of a typical web page when images are considered. My interests in [http://en.wikipedia.org/wiki/Concurrency_%28computer_science%29 concurrency] led me to aggressively yield the [http://en.wikipedia.org/wiki/Cpu CPU] to other programs during the installation process, permitting the user to run background activities such as playing [http://en.wikipedia.org/wiki/Midi MIDI] files for music during the installation. {{Tech:Win16}} implements [http://en.wikipedia.org/wiki/Cooperative_multitasking#Cooperative_multitasking.2Ftime-sharing cooperative multitasking] between programs, so cooperation was necessary to give the illusion of concurrency. CatSetup's [http://en.wikipedia.org/wiki/Scripting_language scripting language] is named KittyScript, continuing the [http://en.wikipedia.org/wiki/Cat cat] theme of most of my early software. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/catsetupdocs.exe Download the CatSetup distribution]''', which includes the [https://www.moonlightdesign.org/steve/programs/catsetup/default.htm documentation] *'''[https://www.moonlightdesign.org/steve/programs/catsetup/default.htm View CatSetup's documentation]''' ==Limitations== As a {{Tech:Win16}} program, CatSetup cannot handle [http://en.wikipedia.org/wiki/Long_file_name long file names] without the help of [http://en.wikipedia.org/wiki/Batch_file batch files] in the install process to rename short file names to long file names. This also means that CatSetup does not give access to any {{Tech:Win32}} functionality, such as the [http://en.wikipedia.org/wiki/Windows_Registry registry]. Installing files from a resource inside the installer's EXE file might write out a small amount of unknown memory contents at the end of the file when [http://en.wikipedia.org/wiki/Wine_%28software%29 Wine] is used to run CatSetup, and this might also happen in Windows when the resource is not compressed. This bug was never fixed due to me abandoning CatSetup for {{Tech:Win32}}-based installers. a37042edf911012efbd5208059febd85029a3471 1854 1853 2007-10-13T18:49:37Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Program-catsetup.png|thumb|right|300px|CatSetup's [http://en.wikipedia.org/wiki/Splash_screen splash screen]]] CatSetup was a scriptable [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] [http://en.wikipedia.org/wiki/Installation_%28computer_programs%29 installer] and [http://en.wikipedia.org/wiki/Uninstaller uninstaller] primarily used to distribute [[Steven Lawrance#Software that I created|my software programs]]. It supports installation from multiple media types, including [http://en.wikipedia.org/wiki/Cd-rom CD-ROMs], one or more [http://en.wikipedia.org/wiki/Floppy_disk floppy disks], [http://en.wikipedia.org/wiki/Hard_drive hard drives], mounted network drives, and single-file [http://en.wikipedia.org/wiki/New_Executable EXE] downloads over the Internet. Installer size minimization and multitasking maximization were the primary [http://www.sei.cmu.edu/publications/documents/95.reports/95.tr.021.html quality attributes] considered during CatSetup's construction. By making CatSetup's disk footprint as small as possible, programs distributed using CatSetup could be downloaded more easily through through [http://en.wikipedia.org/wiki/Bulletin_board_system bulletin board systems (BBS)], which were prevalent in the mid-1990s. The disk footprint of CatSetup 1.9 -- the final version -- is 96,946 bytes, which is less than the size of a typical web page when images are considered. My interests in [http://en.wikipedia.org/wiki/Concurrency_%28computer_science%29 concurrency] led me to aggressively yield the [http://en.wikipedia.org/wiki/Cpu CPU] to other programs during the installation process, permitting the user to run background activities such as playing [http://en.wikipedia.org/wiki/Midi MIDI] files for music during the installation. {{Tech:Win16}} implements [http://en.wikipedia.org/wiki/Cooperative_multitasking#Cooperative_multitasking.2Ftime-sharing cooperative multitasking] between programs, so cooperation was necessary to give the illusion of concurrency. CatSetup's [http://en.wikipedia.org/wiki/Scripting_language scripting language] is named KittyScript, continuing the [http://en.wikipedia.org/wiki/Cat cat] theme of most of my early software. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/catsetupdocs.exe Download the CatSetup distribution]''', which includes the [https://www.moonlightdesign.org/steve/programs/catsetup/default.htm documentation] *'''[https://www.moonlightdesign.org/steve/programs/catsetup/default.htm View CatSetup's documentation]''' ==Limitations== As a {{Tech:Win16}} program, CatSetup cannot handle [http://en.wikipedia.org/wiki/Long_file_name long file names] without the help of [http://en.wikipedia.org/wiki/Batch_file batch files] in the install process to rename short file names to long file names. This also means that CatSetup does not give access to any {{Tech:Win32}} functionality, such as the [http://en.wikipedia.org/wiki/Windows_Registry registry]. Installing files from a resource inside the installer's EXE file might write out a small amount of unknown memory contents at the end of the file when [http://en.wikipedia.org/wiki/Wine_%28software%29 Wine] is used to run CatSetup, and this might also happen in Windows when the resource is not compressed. This bug was never fixed due to me abandoning CatSetup for {{Tech:Win32}}-based installers. 2d66da75dce24006795348cf56086b847e8c0dc2 KittyCat! Comm 0 1555 1857 1856 2007-10-13T19:03:30Z Stevenlawrance 1 wikitext text/x-wiki [[Image:KittyCatComm-About.png|right|thumb|350px|The "about" window in KittyCat! Comm 1.0. Clicking on the cat picture causes the window to "meow" on systems with audio capabilities]] KittyCat! Comm was a [http://en.wikipedia.org/wiki/Bulletin_board_system bulletin board system (BBS)] communication program for [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1] with ambitious plans. The vision was to support traditional text-based BBS systems and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics] along with arbitrary data exchange between remote programs and BBS-driven [[SLOS-DOS|SLOS scripting]]. This project was abandoned shortly after I started using the [http://en.wikipedia.org/wiki/Internet Internet] and [http://en.wikipedia.org/wiki/Internet_protocol_suite TCP/IP]; they made KittyCat! Comm obsolete. The implementation supports multiple telephone numbers per BBS, inter-program communication using the [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] mechanism in [http://en.wikipedia.org/wiki/Microsoft_Windows Windows], [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics] rendering in its console, and a partially-implemented MeowModem file transfer program. Almost every part of the system has [http://en.wikipedia.org/wiki/Cat cat]-themed names, such as its KittyDDE [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)]. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/kittycatcomm.zip Download KittyCat! Comm and its source code]''' *'''[https://www.moonlightdesign.org/steve/programs/kittycatcomm.exe Download the KittyCat! Comm installer]''', which does not appear to work properly in [http://en.wikipedia.org/wiki/Windows_xp Windows XP] and [http://en.wikipedia.org/wiki/Wine_%28software%29 Wine]. Download the [https://www.moonlightdesign.org/steve/programs/kittycatcomm.zip zip file] instead unless if you are using Windows 3.1 ==Dialing Directory== The dialing directory was implemented using minimized [http://en.wikipedia.org/wiki/Multiple_document_interface multiple document interface (MDI)] windows, which appear as icons with a title underneath on [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1]. This was meant to make BBSes appear as programs as they did in the Windows [http://en.wikipedia.org/wiki/Program_Manager Program Manager]. In [http://en.wikipedia.org/wiki/Windows_95 Windows 95] and later versions, minimized MDI windows appear as small title bars with control icons, making the dialing directory's user interface appear drastically different. {| |[[Image:Program-kittycatcomm.png|thumb|400px|none|The dialing directory as it appears on a [http://en.wikipedia.org/wiki/Windows_95 Windows 95] system]] |[[Image:KittyCatComm-BBSOptions.png|thumb|200px|none|The BBS options page, which appears when a BBS is double-clicked on or "restored" via MDI]] |- |[[Image:KittyCatComm-BBSConfig.png|thumb|300px|none|The properties page for a BBS. The horizontal scrollbar navigates through the BBS's telephone numbers]] |[[Image:KittyCatComm-ModemConfig.png|thumb|300px|none|The modem strings configuration dialog box]] |- |[[Image:KittyCatComm-Preferences.png|thumb|300px|none|The serial device and modem properties page]] |[[Image:KittyCatComm-KittyDDE.png|thumb|200px|none|Output from the KittyDDE diagnostics tool]] |} ==Terminal Console== The terminal console appears after a successful connection to a BBS is made. It can also be launched while KittyCat! Comm is not running, which puts the console into [http://en.wikipedia.org/wiki/Echo_%28computing%29 local-echo] mode. Support for ANSI and partial support for RIPscrip exists in the implementation, though [http://en.wikipedia.org/wiki/ZMODEM Zmodem] file transfer support was never finished. {| |[[Image:KittyCatComm-ARZ-Text.png|thumb|400px|none|ANSI text]] |[[Image:KittyCatComm-ARZ-Settings.png|thumb|300px|none|Console preferences dialog box. The default 20-color [http://en.wikipedia.org/wiki/Palette_%28computing%29 palette] in Windows 3.1 did not include a good brown color, so this console implements its own in its palette and calls it TrueBrown]] |- |[[Image:KittyCatComm-ARZ-RIP.png|thumb|400px|none|RIPscrip graphics test]] |[[Image:KittyCatComm-ARZ-About.png|thumb|300px|none|The "about" dialog box]] |} e4d05205bef227117fc6e624d35613aceedf98b2 1881 1857 2007-10-14T03:30:07Z Stevenlawrance 1 /* Download */ wikitext text/x-wiki [[Image:KittyCatComm-About.png|right|thumb|350px|The "about" window in KittyCat! Comm 1.0. Clicking on the cat picture causes the window to "meow" on systems with audio capabilities]] KittyCat! Comm was a [http://en.wikipedia.org/wiki/Bulletin_board_system bulletin board system (BBS)] communication program for [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1] with ambitious plans. The vision was to support traditional text-based BBS systems and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics] along with arbitrary data exchange between remote programs and BBS-driven [[SLOS-DOS|SLOS scripting]]. This project was abandoned shortly after I started using the [http://en.wikipedia.org/wiki/Internet Internet] and [http://en.wikipedia.org/wiki/Internet_protocol_suite TCP/IP]; they made KittyCat! Comm obsolete. The implementation supports multiple telephone numbers per BBS, inter-program communication using the [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] mechanism in [http://en.wikipedia.org/wiki/Microsoft_Windows Windows], [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics] rendering in its console, and a partially-implemented MeowModem file transfer program. Almost every part of the system has [http://en.wikipedia.org/wiki/Cat cat]-themed names, such as its KittyDDE [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)]. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/kittycatcomm.exe Download the KittyCat! Comm installer]''' *'''[https://www.moonlightdesign.org/steve/programs/kittycatcomm.zip Download KittyCat! Comm and its source code]''' ==Dialing Directory== The dialing directory was implemented using minimized [http://en.wikipedia.org/wiki/Multiple_document_interface multiple document interface (MDI)] windows, which appear as icons with a title underneath on [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1]. This was meant to make BBSes appear as programs as they did in the Windows [http://en.wikipedia.org/wiki/Program_Manager Program Manager]. In [http://en.wikipedia.org/wiki/Windows_95 Windows 95] and later versions, minimized MDI windows appear as small title bars with control icons, making the dialing directory's user interface appear drastically different. {| |[[Image:Program-kittycatcomm.png|thumb|400px|none|The dialing directory as it appears on a [http://en.wikipedia.org/wiki/Windows_95 Windows 95] system]] |[[Image:KittyCatComm-BBSOptions.png|thumb|200px|none|The BBS options page, which appears when a BBS is double-clicked on or "restored" via MDI]] |- |[[Image:KittyCatComm-BBSConfig.png|thumb|300px|none|The properties page for a BBS. The horizontal scrollbar navigates through the BBS's telephone numbers]] |[[Image:KittyCatComm-ModemConfig.png|thumb|300px|none|The modem strings configuration dialog box]] |- |[[Image:KittyCatComm-Preferences.png|thumb|300px|none|The serial device and modem properties page]] |[[Image:KittyCatComm-KittyDDE.png|thumb|200px|none|Output from the KittyDDE diagnostics tool]] |} ==Terminal Console== The terminal console appears after a successful connection to a BBS is made. It can also be launched while KittyCat! Comm is not running, which puts the console into [http://en.wikipedia.org/wiki/Echo_%28computing%29 local-echo] mode. Support for ANSI and partial support for RIPscrip exists in the implementation, though [http://en.wikipedia.org/wiki/ZMODEM Zmodem] file transfer support was never finished. {| |[[Image:KittyCatComm-ARZ-Text.png|thumb|400px|none|ANSI text]] |[[Image:KittyCatComm-ARZ-Settings.png|thumb|300px|none|Console preferences dialog box. The default 20-color [http://en.wikipedia.org/wiki/Palette_%28computing%29 palette] in Windows 3.1 did not include a good brown color, so this console implements its own in its palette and calls it TrueBrown]] |- |[[Image:KittyCatComm-ARZ-RIP.png|thumb|400px|none|RIPscrip graphics test]] |[[Image:KittyCatComm-ARZ-About.png|thumb|300px|none|The "about" dialog box]] |} 7434297347adbd0c0c56150870caa543eeac7368 1882 1881 2007-10-14T03:33:56Z Stevenlawrance 1 /* Dialing Directory */ wikitext text/x-wiki [[Image:KittyCatComm-About.png|right|thumb|350px|The "about" window in KittyCat! Comm 1.0. Clicking on the cat picture causes the window to "meow" on systems with audio capabilities]] KittyCat! Comm was a [http://en.wikipedia.org/wiki/Bulletin_board_system bulletin board system (BBS)] communication program for [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1] with ambitious plans. The vision was to support traditional text-based BBS systems and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics] along with arbitrary data exchange between remote programs and BBS-driven [[SLOS-DOS|SLOS scripting]]. This project was abandoned shortly after I started using the [http://en.wikipedia.org/wiki/Internet Internet] and [http://en.wikipedia.org/wiki/Internet_protocol_suite TCP/IP]; they made KittyCat! Comm obsolete. The implementation supports multiple telephone numbers per BBS, inter-program communication using the [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] mechanism in [http://en.wikipedia.org/wiki/Microsoft_Windows Windows], [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics] rendering in its console, and a partially-implemented MeowModem file transfer program. Almost every part of the system has [http://en.wikipedia.org/wiki/Cat cat]-themed names, such as its KittyDDE [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)]. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/kittycatcomm.exe Download the KittyCat! Comm installer]''' *'''[https://www.moonlightdesign.org/steve/programs/kittycatcomm.zip Download KittyCat! Comm and its source code]''' ==Dialing Directory== The dialing directory was implemented using minimized [http://en.wikipedia.org/wiki/Multiple_document_interface multiple document interface (MDI)] windows, which appear as icons with a title underneath on [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1]. This was meant to make BBSes appear as programs as they did in the Windows [http://en.wikipedia.org/wiki/Program_Manager Program Manager]. In [http://en.wikipedia.org/wiki/Windows_95 Windows 95] and later versions, minimized MDI windows appear as small title bars with control icons, making the dialing directory's user interface appear drastically different. {| |[[Image:Program-kittycatcomm.png|thumb|400px|none|The dialing directory as it appears on a [http://en.wikipedia.org/wiki/Windows_95 Windows 95] system]] |[[Image:KittyCatComm-BBSOptions.png|thumb|200px|none|The BBS options page, which appears when a BBS is double-clicked on or "restored" via MDI]] |- |[[Image:KittyCatCommWin31.png|thumb|400px|none|The dialing directory as it appears on a [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1] system]] |[[Image:KittyCatComm-BBSConfig.png|thumb|300px|none|The properties page for a BBS. The horizontal scrollbar navigates through the BBS's telephone numbers]] |- |[[Image:KittyCatComm-ModemConfig.png|thumb|300px|none|The modem strings configuration dialog box]] |[[Image:KittyCatComm-Preferences.png|thumb|300px|none|The serial device and modem properties page]] |- |[[Image:KittyCatComm-KittyDDE.png|thumb|200px|none|Output from the KittyDDE diagnostics tool]] |} ==Terminal Console== The terminal console appears after a successful connection to a BBS is made. It can also be launched while KittyCat! Comm is not running, which puts the console into [http://en.wikipedia.org/wiki/Echo_%28computing%29 local-echo] mode. Support for ANSI and partial support for RIPscrip exists in the implementation, though [http://en.wikipedia.org/wiki/ZMODEM Zmodem] file transfer support was never finished. {| |[[Image:KittyCatComm-ARZ-Text.png|thumb|400px|none|ANSI text]] |[[Image:KittyCatComm-ARZ-Settings.png|thumb|300px|none|Console preferences dialog box. The default 20-color [http://en.wikipedia.org/wiki/Palette_%28computing%29 palette] in Windows 3.1 did not include a good brown color, so this console implements its own in its palette and calls it TrueBrown]] |- |[[Image:KittyCatComm-ARZ-RIP.png|thumb|400px|none|RIPscrip graphics test]] |[[Image:KittyCatComm-ARZ-About.png|thumb|300px|none|The "about" dialog box]] |} 517110e2b1a4d539ea177dbddc566d6268ec6c32 1883 1882 2007-10-14T03:34:45Z Stevenlawrance 1 /* Dialing Directory */ wikitext text/x-wiki [[Image:KittyCatComm-About.png|right|thumb|350px|The "about" window in KittyCat! Comm 1.0. Clicking on the cat picture causes the window to "meow" on systems with audio capabilities]] KittyCat! Comm was a [http://en.wikipedia.org/wiki/Bulletin_board_system bulletin board system (BBS)] communication program for [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1] with ambitious plans. The vision was to support traditional text-based BBS systems and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics] along with arbitrary data exchange between remote programs and BBS-driven [[SLOS-DOS|SLOS scripting]]. This project was abandoned shortly after I started using the [http://en.wikipedia.org/wiki/Internet Internet] and [http://en.wikipedia.org/wiki/Internet_protocol_suite TCP/IP]; they made KittyCat! Comm obsolete. The implementation supports multiple telephone numbers per BBS, inter-program communication using the [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] mechanism in [http://en.wikipedia.org/wiki/Microsoft_Windows Windows], [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics] rendering in its console, and a partially-implemented MeowModem file transfer program. Almost every part of the system has [http://en.wikipedia.org/wiki/Cat cat]-themed names, such as its KittyDDE [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)]. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/kittycatcomm.exe Download the KittyCat! Comm installer]''' *'''[https://www.moonlightdesign.org/steve/programs/kittycatcomm.zip Download KittyCat! Comm and its source code]''' ==Dialing Directory== The dialing directory was implemented using minimized [http://en.wikipedia.org/wiki/Multiple_document_interface multiple document interface (MDI)] windows, which appear as icons with a title underneath on [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1]. This was meant to make BBSes appear as programs as they did in the Windows [http://en.wikipedia.org/wiki/Program_Manager Program Manager]. In [http://en.wikipedia.org/wiki/Windows_95 Windows 95] and later versions, minimized MDI windows appear as small title bars with control icons, making the dialing directory's user interface appear drastically different. {| |[[Image:KittyCatCommWin31.png|thumb|400px|none|The dialing directory as it appears on a [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1] system]] |[[Image:KittyCatComm-BBSOptions.png|thumb|200px|none|The BBS options page, which appears when a BBS is double-clicked on or "restored" via MDI]] |- |[[Image:Program-kittycatcomm.png|thumb|400px|none|The dialing directory as it appears on a [http://en.wikipedia.org/wiki/Windows_95 Windows 95] system]] |[[Image:KittyCatComm-BBSConfig.png|thumb|300px|none|The properties page for a BBS. The horizontal scrollbar navigates through the BBS's telephone numbers]] |- |[[Image:KittyCatComm-ModemConfig.png|thumb|300px|none|The modem strings configuration dialog box]] |[[Image:KittyCatComm-Preferences.png|thumb|300px|none|The serial device and modem properties page]] |- |[[Image:KittyCatComm-KittyDDE.png|thumb|200px|none|Output from the KittyDDE diagnostics tool]] |} ==Terminal Console== The terminal console appears after a successful connection to a BBS is made. It can also be launched while KittyCat! Comm is not running, which puts the console into [http://en.wikipedia.org/wiki/Echo_%28computing%29 local-echo] mode. Support for ANSI and partial support for RIPscrip exists in the implementation, though [http://en.wikipedia.org/wiki/ZMODEM Zmodem] file transfer support was never finished. {| |[[Image:KittyCatComm-ARZ-Text.png|thumb|400px|none|ANSI text]] |[[Image:KittyCatComm-ARZ-Settings.png|thumb|300px|none|Console preferences dialog box. The default 20-color [http://en.wikipedia.org/wiki/Palette_%28computing%29 palette] in Windows 3.1 did not include a good brown color, so this console implements its own in its palette and calls it TrueBrown]] |- |[[Image:KittyCatComm-ARZ-RIP.png|thumb|400px|none|RIPscrip graphics test]] |[[Image:KittyCatComm-ARZ-About.png|thumb|300px|none|The "about" dialog box]] |} 08ba1975aa8e0c8cd2e933ffb7887ef327af816c 1891 1883 2007-10-14T04:25:08Z Stevenlawrance 1 /* Dialing Directory */ wikitext text/x-wiki [[Image:KittyCatComm-About.png|right|thumb|350px|The "about" window in KittyCat! Comm 1.0. Clicking on the cat picture causes the window to "meow" on systems with audio capabilities]] KittyCat! Comm was a [http://en.wikipedia.org/wiki/Bulletin_board_system bulletin board system (BBS)] communication program for [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1] with ambitious plans. The vision was to support traditional text-based BBS systems and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics] along with arbitrary data exchange between remote programs and BBS-driven [[SLOS-DOS|SLOS scripting]]. This project was abandoned shortly after I started using the [http://en.wikipedia.org/wiki/Internet Internet] and [http://en.wikipedia.org/wiki/Internet_protocol_suite TCP/IP]; they made KittyCat! Comm obsolete. The implementation supports multiple telephone numbers per BBS, inter-program communication using the [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] mechanism in [http://en.wikipedia.org/wiki/Microsoft_Windows Windows], [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics] rendering in its console, and a partially-implemented MeowModem file transfer program. Almost every part of the system has [http://en.wikipedia.org/wiki/Cat cat]-themed names, such as its KittyDDE [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)]. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/kittycatcomm.exe Download the KittyCat! Comm installer]''' *'''[https://www.moonlightdesign.org/steve/programs/kittycatcomm.zip Download KittyCat! Comm and its source code]''' ==Dialing Directory== The dialing directory was implemented using minimized [http://en.wikipedia.org/wiki/Multiple_document_interface multiple document interface (MDI)] windows, which appear as icons with a title underneath on [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1]. This was meant to make BBSes appear as programs as they did in the [http://en.wikipedia.org/wiki/Program_Manager Windows Program Manager]. In [http://en.wikipedia.org/wiki/Windows_95 Windows 95] and later versions, minimized MDI windows appear as small title bars with control icons, making the dialing directory's user interface appear drastically different. {| |[[Image:KittyCatCommWin31.png|thumb|400px|none|The dialing directory as it appears on a [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1] system]] |[[Image:KittyCatComm-BBSOptions.png|thumb|200px|none|The BBS options page, which appears when a BBS is double-clicked on or "restored" via MDI]] |- |[[Image:Program-kittycatcomm.png|thumb|400px|none|The dialing directory as it appears on a [http://en.wikipedia.org/wiki/Windows_95 Windows 95] system]] |[[Image:KittyCatComm-BBSConfig.png|thumb|300px|none|The properties page for a BBS. The horizontal scrollbar navigates through the BBS's telephone numbers]] |- |[[Image:KittyCatComm-ModemConfig.png|thumb|300px|none|The modem strings configuration dialog box]] |[[Image:KittyCatComm-Preferences.png|thumb|300px|none|The serial device and modem properties page]] |- |[[Image:KittyCatComm-KittyDDE.png|thumb|200px|none|Output from the KittyDDE diagnostics tool]] |} ==Terminal Console== The terminal console appears after a successful connection to a BBS is made. It can also be launched while KittyCat! Comm is not running, which puts the console into [http://en.wikipedia.org/wiki/Echo_%28computing%29 local-echo] mode. Support for ANSI and partial support for RIPscrip exists in the implementation, though [http://en.wikipedia.org/wiki/ZMODEM Zmodem] file transfer support was never finished. {| |[[Image:KittyCatComm-ARZ-Text.png|thumb|400px|none|ANSI text]] |[[Image:KittyCatComm-ARZ-Settings.png|thumb|300px|none|Console preferences dialog box. The default 20-color [http://en.wikipedia.org/wiki/Palette_%28computing%29 palette] in Windows 3.1 did not include a good brown color, so this console implements its own in its palette and calls it TrueBrown]] |- |[[Image:KittyCatComm-ARZ-RIP.png|thumb|400px|none|RIPscrip graphics test]] |[[Image:KittyCatComm-ARZ-About.png|thumb|300px|none|The "about" dialog box]] |} ab7c6099b1158064d518813f6583a2521c5c7503 File:BryantPride.png 6 1559 1858 2007-10-13T21:54:36Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Template:Tech:MIDI 10 1560 1859 2007-10-13T22:09:43Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Musical_Instrument_Digital_Interface MIDI] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Musical_Instrument_Digital_Interface MIDI] 045267db1816eac39e9376c39e5cd565cc2b2f8e Steven Lawrance 0 1409 1860 1850 2007-10-13T22:10:25Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}|| || |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| ||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk||{{Tech:C}}, {{Tech:Win32}}||650||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing game that I made a long time ago||{{Tech:C}}, {{Tech:Win16}}||3,348||1996-1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}||0||1994-1995 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide [http://en.wikipedia.org/wiki/BitBLT bit blit-like] operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces||{{Tech:Java}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] badea46dc2e12843418f6e7ca0097bfe84c96f3b 1869 1860 2007-10-14T00:32:39Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| ||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Read, write, verify, and erase entire disks into/from raw image files. Similar to rawrite.exe, but actually works in Windows NT. Actually, Disk Imager only works in Windows NT/2000 due to how it opens the selected disk||{{Tech:C}}, {{Tech:Win32}}||650||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing game that I made a long time ago||{{Tech:C}}, {{Tech:Win16}}||3,348||1996-1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}||0||1994-1995 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide [http://en.wikipedia.org/wiki/BitBLT bit blit-like] operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces||{{Tech:Java}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 9212e785c97c382919a06b6fe9925476b82aeb71 1892 1869 2007-10-14T04:42:56Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| ||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from raw image files. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||650||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing game that I made a long time ago||{{Tech:C}}, {{Tech:Win16}}||3,348||1996-1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}||0||1994-1995 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide [http://en.wikipedia.org/wiki/BitBLT bit blit-like] operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces||{{Tech:Java}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] e3b21bb99c51ffa7300637b6578ee88c3177684e 1893 1892 2007-10-14T04:43:25Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| ||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||650||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing game that I made a long time ago||{{Tech:C}}, {{Tech:Win16}}||3,348||1996-1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}||0||1994-1995 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide [http://en.wikipedia.org/wiki/BitBLT bit blit-like] operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces||{{Tech:Java}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] ca6d30607f5b567a8bfcf0ba882874e284de7dfa 1896 1893 2007-10-14T04:55:42Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| ||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing game that I made a long time ago||{{Tech:C}}, {{Tech:Win16}}||3,348||1996-1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the Media Control Interface directly rather than through point-and-clicking||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}||0||1994-1995 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide [http://en.wikipedia.org/wiki/BitBLT bit blit-like] operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces||{{Tech:Java}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] a3ce8a7c990226dd16c5b5a8239d0e043e9c2a05 1900 1896 2007-10-14T05:23:08Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| ||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing game that I made a long time ago||{{Tech:C}}, {{Tech:Win16}}||3,348||1996-1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through point-and-clicking||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}||0||1994-1995 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide [http://en.wikipedia.org/wiki/BitBLT bit blit-like] operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces||{{Tech:Java}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] a9ee0ad619de6000dd6eb0142d29b6d4e64a9355 1901 1900 2007-10-14T05:23:32Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[http://www.moonlightdesign.org/dirlist DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| ||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing game that I made a long time ago||{{Tech:C}}, {{Tech:Win16}}||3,348||1996-1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}||0||1994-1995 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide [http://en.wikipedia.org/wiki/BitBLT bit blit-like] operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces||{{Tech:Java}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 90392cb7688e08dbaee73a5f5debe68926291153 1905 1901 2007-10-14T05:30:07Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| ||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing game that I made a long time ago||{{Tech:C}}, {{Tech:Win16}}||3,348||1996-1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}||0||1994-1995 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide [http://en.wikipedia.org/wiki/BitBLT bit blit-like] operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces||{{Tech:Java}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 05d81d338f058ad23014aee8c34dfa1ebb5c92d3 1906 1905 2007-10-14T05:32:42Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| ||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing game that I made a long time ago||{{Tech:C}}, {{Tech:Win16}}||3,348||1996-1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}||0||1994-1995 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide [http://en.wikipedia.org/wiki/BitBLT bit blit-like] operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces||{{Tech:Java}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] a17da45a2ee98694eae0fa14282198549c1cec84 Bryant PRIDE web site 0 1561 1861 2007-10-13T22:16:18Z Stevenlawrance 1 New page: [[Image:BryantPride.png|thumb|right|400px|Bryant PRIDE's web site in 1998]] In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced Bry... wikitext text/x-wiki [[Image:BryantPride.png|thumb|right|400px|Bryant PRIDE's web site in 1998]] In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}. I served as Bryant PRIDE's president during my last academic year at Bryant University -- from 1999 to 2000. Due to my graduation, I no longer maintain [http://web.bryant.edu/~pride/ Bryant PRIDE's web site], and it has since moved on from the designs that I had used. ==MIDI Jukebox== One of the more interesting features of the site was a {{Tech:MIDI}} jukebox that played music in the background using {{Tech:JavaScript}}, [http://en.wikipedia.org/wiki/Windows_media_player Windows Media Player], and [http://en.wikipedia.org/wiki/Internet_explorer Internet Explorer]. efff2a6fd57709914df5f156a19b6783b3529052 1863 1861 2007-10-14T00:09:48Z Stevenlawrance 1 /* MIDI Jukebox */ wikitext text/x-wiki [[Image:BryantPride.png|thumb|right|400px|Bryant PRIDE's web site in 1998]] In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}. I served as Bryant PRIDE's president during my last academic year at Bryant University -- from 1999 to 2000. Due to my graduation, I no longer maintain [http://web.bryant.edu/~pride/ Bryant PRIDE's web site], and it has since moved on from the designs that I had used. ==KittyCat! Jukebox== One of the more interesting features of the site was a {{Tech:MIDI}} jukebox that played music in the background using {{Tech:JavaScript}}, [http://en.wikipedia.org/wiki/Activemovie Microsoft ActiveMovie], and [http://en.wikipedia.org/wiki/Internet_explorer Internet Explorer]. Unfortunately, the jukebox does not function properly in modern versions of Internet Explorer. [[Image:KittyCatJukebox.png|frame|none|KittyCat! Jukebox running in [http://en.wikipedia.org/wiki/Windows_95 Windows 95 OSR2]]] 1820a5a9297d26ef9b86d5ddd2eaabeaefcb6c6e 1864 1863 2007-10-14T00:11:11Z Stevenlawrance 1 wikitext text/x-wiki [[Image:BryantPride.png|thumb|right|400px|Bryant PRIDE's web site in 1998 as viewed with [http://en.wikipedia.org/wiki/Konqueror Konqueror] in [http://www.opensuse.org/ Novell openSUSE 10.2]]] In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced Bryant PRIDE's site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}. I served as Bryant PRIDE's president during my last academic year at Bryant University -- from 1999 to 2000. Due to my graduation, I no longer maintain [http://web.bryant.edu/~pride/ Bryant PRIDE's web site], and it has since moved on from the designs that I had used. ==KittyCat! Jukebox== One of the more interesting features of the site was a {{Tech:MIDI}} jukebox that played music in the background using {{Tech:JavaScript}}, [http://en.wikipedia.org/wiki/Activemovie Microsoft ActiveMovie], and [http://en.wikipedia.org/wiki/Internet_explorer Internet Explorer]. Unfortunately, the jukebox does not function properly in modern versions of Internet Explorer. [[Image:KittyCatJukebox.png|frame|none|KittyCat! Jukebox running in [http://en.wikipedia.org/wiki/Windows_95 Windows 95 OSR2]]] 2e5868b270570bb052af355f3dcaaa34c4b8e70a 1865 1864 2007-10-14T00:13:55Z Stevenlawrance 1 wikitext text/x-wiki [[Image:BryantPride.png|thumb|right|400px|Bryant PRIDE's web site in 1998 as viewed with [http://en.wikipedia.org/wiki/Konqueror Konqueror] in [http://www.opensuse.org/ Novell openSUSE 10.2]]] In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] web site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}. I served as Bryant PRIDE's president during my last academic year at Bryant University -- from 1999 to 2000. Due to my graduation, I no longer maintain [http://web.bryant.edu/~pride/ Bryant PRIDE's web site], and it has since moved on from the designs that I had used. ==KittyCat! Jukebox== One of the more interesting features of the site was a {{Tech:MIDI}} jukebox that played music in the background using {{Tech:JavaScript}}, [http://en.wikipedia.org/wiki/Activemovie Microsoft ActiveMovie], and [http://en.wikipedia.org/wiki/Internet_explorer Internet Explorer]. Unfortunately, the jukebox does not function properly in modern versions of Internet Explorer. [[Image:KittyCatJukebox.png|frame|none|KittyCat! Jukebox running in [http://en.wikipedia.org/wiki/Windows_95 Windows 95 OSR2]]] 7fd7d901af98e4502041f0bdf710d3c780f62450 1866 1865 2007-10-14T00:15:14Z Stevenlawrance 1 wikitext text/x-wiki [[Image:BryantPride.png|thumb|right|450px|Bryant PRIDE's web site in 1998 as viewed with [http://en.wikipedia.org/wiki/Konqueror Konqueror] in [http://www.opensuse.org/ Novell openSUSE 10.2]]] In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] web site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}. I served as Bryant PRIDE's president during my last academic year at Bryant University -- from 1999 to 2000. Due to my graduation, I no longer maintain [http://web.bryant.edu/~pride/ Bryant PRIDE's web site], and it has since moved on from the designs that I had used. ==KittyCat! Jukebox== One of the more interesting features of the site was a {{Tech:MIDI}} jukebox that played music in the background using {{Tech:JavaScript}}, [http://en.wikipedia.org/wiki/Activemovie Microsoft ActiveMovie], and [http://en.wikipedia.org/wiki/Internet_explorer Internet Explorer]. Unfortunately, the jukebox does not function properly in modern versions of Internet Explorer. [[Image:KittyCatJukebox.png|thumb|350px|none|KittyCat! Jukebox running in [http://en.wikipedia.org/wiki/Windows_95 Windows 95 OSR2]]] 094159e30da76935174c0255b4e8e34d5980000e 1867 1866 2007-10-14T00:21:13Z Stevenlawrance 1 wikitext text/x-wiki [[Image:BryantPride.png|thumb|right|450px|Bryant PRIDE's web site in 1998 as viewed with [http://en.wikipedia.org/wiki/Konqueror Konqueror] in [http://www.opensuse.org/ Novell openSUSE 10.2]]] In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] web site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}. The ASP and PHP versions looked similar, but dynamically pulled their front page contents from a database, similar to how modern [http://en.wikipedia.org/wiki/Content_management_system content management systems (CMSes)] operate. I served as Bryant PRIDE's president during my last academic year at Bryant University -- from 1999 to 2000. Due to my graduation, I no longer maintain [http://web.bryant.edu/~pride/ Bryant PRIDE's web site], and it has since moved on from the designs that I had used. ==KittyCat! Jukebox== One of the more interesting features of the site was a {{Tech:MIDI}} jukebox that played music in the background using {{Tech:JavaScript}}, [http://en.wikipedia.org/wiki/Activemovie Microsoft ActiveMovie], and [http://en.wikipedia.org/wiki/Internet_explorer Internet Explorer]. Unfortunately, the jukebox does not function properly in modern versions of Internet Explorer. [[Image:KittyCatJukebox.png|thumb|350px|none|KittyCat! Jukebox running in [http://en.wikipedia.org/wiki/Windows_95 Windows 95 OSR2]]] d36839014575fce8272e081cb7bfc464395b598c 1886 1867 2007-10-14T03:59:26Z Stevenlawrance 1 wikitext text/x-wiki [[Image:BryantPride.png|thumb|right|450px|Bryant PRIDE's web site in 1998 as viewed with [http://en.wikipedia.org/wiki/Konqueror Konqueror] in [http://www.opensuse.org/ Novell openSUSE 10.2]]] In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] web site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}. The ASP and PHP versions looked similar, but dynamically pulled their front page contents from a database, similar to how modern [http://en.wikipedia.org/wiki/Content_management_system content management systems (CMSes)] operate. I served as Bryant PRIDE's president during my last academic year at Bryant University -- from 1999 to 2000. Due to my graduation, I no longer maintain [http://web.bryant.edu/~pride/ Bryant PRIDE's web site], and it has since moved on from the designs that I had used. ==KittyCat! Jukebox== One of the more interesting features of the site was a {{Tech:MIDI}} jukebox that played music in the background using {{Tech:JavaScript}}, [http://en.wikipedia.org/wiki/Activemovie Microsoft ActiveMovie], and [http://en.wikipedia.org/wiki/Internet_explorer Internet Explorer]. Unfortunately, the jukebox does not function properly in modern versions of Internet Explorer. [[Image:KittyCatJukebox.png|thumb|350px|none|KittyCat! Jukebox running in [http://en.wikipedia.org/wiki/Windows_95 Windows 95 OSR2]]] ==ASP Version== To facilitate {{Tech:ASP}} hosting on Bryant University's [http://en.wikipedia.org/wiki/Irix IRIX] web server, I wrote a small [http://en.wikipedia.org/wiki/Common_Gateway_Interface CGI] program in {{Tech:C}} that connects back to my server on the internal residence hall network and caches results on the IRIX server. This ASP version was short-lived as I became familiar with {{Tech:PHP}} and subsequently rewrote the web site in PHP. I ran the PHP version on the public residence hall server, eliminating the need for the CGI proxy. [[Image:BryantPrideServerDown.png|thumb|400px|none|Error page that got displayed from the nph-pride.cgi program when my server was inaccessible and no local cache of the requested resource exists]] ea760f6271f2debd95e817be0d0cf44a987558e6 1889 1886 2007-10-14T04:16:49Z Stevenlawrance 1 wikitext text/x-wiki [[Image:BryantPride.png|thumb|right|450px|Bryant PRIDE's web site in 1998 as viewed with [http://en.wikipedia.org/wiki/Konqueror Konqueror] in [http://www.opensuse.org/ Novell openSUSE 10.2]]] In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] web site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}. I served as Bryant PRIDE's president during my last academic year at Bryant University -- from 1999 to 2000. Due to my graduation, I no longer maintain [http://web.bryant.edu/~pride/ Bryant PRIDE's web site], and it has since moved on from the designs that I had used. ==KittyCat! Jukebox== One of the more interesting features of the site was a {{Tech:MIDI}} jukebox that played music in the background using {{Tech:JavaScript}}, [http://en.wikipedia.org/wiki/Activemovie Microsoft ActiveMovie], and [http://en.wikipedia.org/wiki/Internet_explorer Internet Explorer]. Unfortunately, the jukebox does not function properly in modern versions of Internet Explorer. [[Image:KittyCatJukebox.png|thumb|350px|none|KittyCat! Jukebox running in [http://en.wikipedia.org/wiki/Windows_95 Windows 95 OSR2]]] ==ASP Version== To facilitate {{Tech:ASP}} hosting on Bryant University's [http://en.wikipedia.org/wiki/Irix IRIX] web server, I wrote a small [http://en.wikipedia.org/wiki/Common_Gateway_Interface CGI] program in {{Tech:C}} that connects back to my server on the internal residence hall network and caches results on the IRIX server. This ASP version was short-lived as I became familiar with {{Tech:PHP}} and subsequently rewrote the web site in PHP. I ran the PHP version on the public residence hall server, eliminating the need for the CGI proxy. [[Image:BryantPrideServerDown.png|thumb|400px|none|Error page that got displayed from the nph-pride.cgi program when my server was inaccessible and no local cache of the requested resource exists]] ==PHP Version== With a new version, I redesigned the visual layout of the web site to make it even more fabulous, complemented by the fabulous {{Tech:PHP}} web scripting language. The PHP version ran on the public residence hall server until it was replaced by the next webmaster on Bryant University's IRIX web server. [[Image:BryantPridePHPMain.png|thumb|450px|none|The PHP version of Bryant PRIDE's web site]] [[Image:BryantPridePHPWhatsNew.png|thumb|450px|none|The "what's new" page on the PHP version of Bryant PRIDE's web site]] 2de690a1cd399764b6faa651c4b5bed993ee86ca 1890 1889 2007-10-14T04:22:03Z Stevenlawrance 1 /* ASP Version */ wikitext text/x-wiki [[Image:BryantPride.png|thumb|right|450px|Bryant PRIDE's web site in 1998 as viewed with [http://en.wikipedia.org/wiki/Konqueror Konqueror] in [http://www.opensuse.org/ Novell openSUSE 10.2]]] In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] web site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}. I served as Bryant PRIDE's president during my last academic year at Bryant University -- from 1999 to 2000. Due to my graduation, I no longer maintain [http://web.bryant.edu/~pride/ Bryant PRIDE's web site], and it has since moved on from the designs that I had used. ==KittyCat! Jukebox== One of the more interesting features of the site was a {{Tech:MIDI}} jukebox that played music in the background using {{Tech:JavaScript}}, [http://en.wikipedia.org/wiki/Activemovie Microsoft ActiveMovie], and [http://en.wikipedia.org/wiki/Internet_explorer Internet Explorer]. Unfortunately, the jukebox does not function properly in modern versions of Internet Explorer. [[Image:KittyCatJukebox.png|thumb|350px|none|KittyCat! Jukebox running in [http://en.wikipedia.org/wiki/Windows_95 Windows 95 OSR2]]] ==ASP Version== To facilitate {{Tech:ASP}} hosting on Bryant University's [http://en.wikipedia.org/wiki/Irix IRIX] web server, I wrote a small [http://en.wikipedia.org/wiki/Common_Gateway_Interface CGI] program in {{Tech:C}} that connects back to my server on the internal residence hall network and caches results on the IRIX server. This ASP version was short-lived as I became familiar with {{Tech:PHP}} and subsequently rewrote the web site in PHP. I ran the PHP version on the public residence hall server, eliminating the need for the CGI proxy. [[Image:BryantPrideServerDown.png|thumb|400px|none|Error page that got displayed from the nph-pride.cgi program when my server was inaccessible and no local cache of the requested resource existed]] ==PHP Version== With a new version, I redesigned the visual layout of the web site to make it even more fabulous, complemented by the fabulous {{Tech:PHP}} web scripting language. The PHP version ran on the public residence hall server until it was replaced by the next webmaster on Bryant University's IRIX web server. [[Image:BryantPridePHPMain.png|thumb|450px|none|The PHP version of Bryant PRIDE's web site]] [[Image:BryantPridePHPWhatsNew.png|thumb|450px|none|The "what's new" page on the PHP version of Bryant PRIDE's web site]] fb6704eb3f6d0949cbe80e4a1618cf04bbbac0d5 File:KittyCatJukebox.png 6 1562 1862 2007-10-14T00:08:15Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 SLOS-Win 0 1541 1868 1817 2007-10-14T00:24:14Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Slos-win.png|thumb|450px|Screen shot of the window-based directory listing in SLOS-Win. [http://en.wikipedia.org/wiki/Object_Windows_Library Borland's Window Custom Control library] was used, which provides its look-and-feel]] [[SLOS-DOS|Steven Lawrance's Operating System (SLOS)]], also known briefly as Steven Lawrance's Operating Program (SL-OP), was a small interpreted toy operating environment written in {{Tech:BASIC}} for {{Tech:DOS}}. The primary motivation for writing this was to have an environment that supported [http://en.wikipedia.org/wiki/Long_filename long file names]. This was written in 1993 -- two years before [http://en.wikipedia.org/wiki/Microsoft Microsoft] released native long file name support in a consumer operating system with [http://en.wikipedia.org/wiki/Windows_95 Windows 95]. A small subset of the SLOS commands were implemented in this Windows version. Unfortunately, this Windows version cannot run most of the SLOS programs that were written. ==Download== '''[https://www.moonlightdesign.org/steve/programs/slosdist1.exe Download SLOS-DOS and SLOS-Win]''' '''[https://www.moonlightdesign.org/steve/programs/sloswin.zip Download SLOS-Win's Source Code]''' 26f900e01825c4f105044180dd2e77d3551fa014 File:HorsesProgman.png 6 1563 1870 2007-10-14T02:14:54Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:HorseEdit.png 6 1564 1871 2007-10-14T02:15:04Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:HorsesShop.png 6 1565 1872 2007-10-14T02:15:15Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:HorsesDifficulty.png 6 1566 1873 2007-10-14T02:15:29Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:HorsesAbout.png 6 1567 1874 2007-10-14T02:15:40Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:HorsesPlay.png 6 1568 1875 2007-10-14T02:15:55Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Horses 0 1569 1876 2007-10-14T03:10:46Z Stevenlawrance 1 New page: [[Image:Program-horsesforwindows1 0.png|thumb|right|400px|Horses for Windows running in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]]] [[Image:HorsesDifficulty.png|thumb|right|400p... wikitext text/x-wiki [[Image:Program-horsesforwindows1 0.png|thumb|right|400px|Horses for Windows running in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]]] [[Image:HorsesDifficulty.png|thumb|right|400px|Horses for Windows running in [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1]. Four different difficulty levels exist in this game: Easy, Medium, Hard, and CATastrophe]] Horses for Windows is a [http://en.wikipedia.org/wiki/Horse_racing horse racing] [http://en.wikipedia.org/wiki/Strategy_game strategy game] written for {{Tech:Win16}}. Depending on the health and happiness of the player's and computer's horses, one horse wins a race while the other loses, though ties are possible. Between races, the player and the computer buy horse supplies from a shared store, giving priority to the player and leaving the computer with the leftovers. The objective of the game is thus to earn enough money through race betting to buy most or all supplies in the store on every round, leaving the computer's horse unhealthy and unhappy. Horses was inspired by a horse racing program that Robert "Bobby" Zoller, a friend in high school, wrote on a [http://en.wikipedia.org/wiki/TI-81 TI-81 graphing calculator]. That game used dots to represent the horses as they moved across the screen. Horses for Windows applied that same concept with graphics and added the shared store to make it a strategy game. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/horses.zip Download Horses for Windows]''' *'''[https://www.moonlightdesign.org/steve/programs/ghsprom.exe Download Horses for Windows, Prom Edition]''', which is a variant that I wrote for the prom while in high school ==Screen Shots== {| |[[Image:HorsesPlay.png|thumb|300px|none|The main game play screen, which lets the player place a bet for the race. A bet of zero dollars is permitted, but a negative bet is not allowed]] |[[Image:HorsesShop.png|thumb|350px|none|The shop. Although you can buy more than one horse, only one is used in the race, and at least one is required to race]] |- |[[Image:HorsesProgman.png|thumb|300px|none|The icons added by the installer in the [http://en.wikipedia.org/wiki/Program_Manager Windows Program Manager]]] |[[Image:HorsesAbout.png|thumb|350px|none|The program's "about" screen]] |} ==Cheating== To facilitate easy cheating, I wrote a saved game editor that enables users to adjust the attributes of their horse as well as the computer's horse, the supply levels at the shared shop, and the odds of winning the next race. [[Image:HorseEdit.png|thumb|300px|none|The Horses for Windows saved game editor]] ==Prom Edition== In 1997, I adapted Horses for Windows to have a prom theme, which primarily affects the shared store. Instead of feed, horses, and stables, the store sells roses, tickets, and hotel rooms. The horse happiness algorithm was renamed to the players' dancing abilities. Everything had a prom theme except for the racing itself, which continued to use horse images. f3b1279697eb12839d1fb3d6c9644aca2ca0cd6b 1879 1876 2007-10-14T03:28:20Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Program-horsesforwindows1 0.png|thumb|right|400px|Horses for Windows running in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]]] [[Image:HorsesDifficulty.png|thumb|right|400px|Horses for Windows running in [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1]. Four different difficulty levels exist in this game: Easy, Medium, Hard, and CATastrophe]] Horses for Windows is a [http://en.wikipedia.org/wiki/Horse_racing horse racing] [http://en.wikipedia.org/wiki/Strategy_game strategy game] written for {{Tech:Win16}}. Depending on the health and happiness of the player's and computer's horses, one horse wins a race while the other loses, though ties are possible. Between races, the player and the computer buy horse supplies from a shared store, giving priority to the player and leaving the computer with the leftovers. The objective of the game is thus to earn enough money through race betting to buy most or all supplies in the store on every round, leaving the computer's horse unhealthy and unhappy. Horses was inspired by a horse racing program that Robert "Bobby" Zoller, a friend in high school, wrote on a [http://en.wikipedia.org/wiki/TI-81 TI-81 graphing calculator]. That game used dots to represent the horses as they moved across the screen. Horses for Windows applied that same concept with graphics and added the shared store to make it a strategy game. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/horses.zip Download Horses for Windows]''' *'''[https://www.moonlightdesign.org/steve/programs/ghsprom.exe Download Horses for Windows, Prom Edition]''', which is a variant that I wrote for the prom while in high school ==Screen Shots== {| |[[Image:HorsesPlay.png|thumb|300px|none|The main game play screen, which lets the player place a bet for the race. A bet of zero dollars is permitted, but a negative bet is not allowed]] |[[Image:HorsesShop.png|thumb|350px|none|The shop. Although you can buy more than one horse, only one is used in the race, and at least one is required to race]] |- |[[Image:HorsesProgman.png|thumb|300px|none|The icons added by the installer in the [http://en.wikipedia.org/wiki/Program_Manager Windows Program Manager]]] |[[Image:HorsesAbout.png|thumb|350px|none|The program's "about" screen]] |} ==Cheating== To facilitate easy cheating, I wrote a saved game editor that enables users to adjust the attributes of their horse as well as the computer's horse, the supply levels at the shared shop, and the odds of winning the next race. [[Image:HorseEdit.png|thumb|300px|none|The Horses for Windows saved game editor]] ==Prom Edition== In 1997, I [https://www.moonlightdesign.org/steve/programs/ghsprom.exe adapted] Horses for Windows to have a prom theme, which primarily affects the shared store. Instead of feed, horses, and stables, the store sells roses, tickets, and hotel rooms. [[Image:HorsesPromMain.png|thumb|400px|none|The main screen in Horses for Windows Prom Edition using [http://en.wikipedia.org/wiki/Wine_%28software%29 Wine] on [http://www.opensuse.org/ Novell openSUSE 10.2]]] [[Image:HorsesPromRacing.png|thumb|400px|none|The race in Horses for Windows Prom Edition using [http://en.wikipedia.org/wiki/Wine_%28software%29 Wine] on [http://www.opensuse.org/ Novell openSUSE 10.2]]] 6aaa07613482bfdbff1fc0bf7630f9b0d0eb36b2 1898 1879 2007-10-14T05:09:03Z Stevenlawrance 1 /* Prom Edition */ wikitext text/x-wiki [[Image:Program-horsesforwindows1 0.png|thumb|right|400px|Horses for Windows running in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]]] [[Image:HorsesDifficulty.png|thumb|right|400px|Horses for Windows running in [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1]. Four different difficulty levels exist in this game: Easy, Medium, Hard, and CATastrophe]] Horses for Windows is a [http://en.wikipedia.org/wiki/Horse_racing horse racing] [http://en.wikipedia.org/wiki/Strategy_game strategy game] written for {{Tech:Win16}}. Depending on the health and happiness of the player's and computer's horses, one horse wins a race while the other loses, though ties are possible. Between races, the player and the computer buy horse supplies from a shared store, giving priority to the player and leaving the computer with the leftovers. The objective of the game is thus to earn enough money through race betting to buy most or all supplies in the store on every round, leaving the computer's horse unhealthy and unhappy. Horses was inspired by a horse racing program that Robert "Bobby" Zoller, a friend in high school, wrote on a [http://en.wikipedia.org/wiki/TI-81 TI-81 graphing calculator]. That game used dots to represent the horses as they moved across the screen. Horses for Windows applied that same concept with graphics and added the shared store to make it a strategy game. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/horses.zip Download Horses for Windows]''' *'''[https://www.moonlightdesign.org/steve/programs/ghsprom.exe Download Horses for Windows, Prom Edition]''', which is a variant that I wrote for the prom while in high school ==Screen Shots== {| |[[Image:HorsesPlay.png|thumb|300px|none|The main game play screen, which lets the player place a bet for the race. A bet of zero dollars is permitted, but a negative bet is not allowed]] |[[Image:HorsesShop.png|thumb|350px|none|The shop. Although you can buy more than one horse, only one is used in the race, and at least one is required to race]] |- |[[Image:HorsesProgman.png|thumb|300px|none|The icons added by the installer in the [http://en.wikipedia.org/wiki/Program_Manager Windows Program Manager]]] |[[Image:HorsesAbout.png|thumb|350px|none|The program's "about" screen]] |} ==Cheating== To facilitate easy cheating, I wrote a saved game editor that enables users to adjust the attributes of their horse as well as the computer's horse, the supply levels at the shared shop, and the odds of winning the next race. [[Image:HorseEdit.png|thumb|300px|none|The Horses for Windows saved game editor]] ==Prom Edition== In 1997, I [https://www.moonlightdesign.org/steve/programs/ghsprom.exe adapted] Horses for Windows to have a [http://en.wikipedia.org/wiki/Prom prom] theme, which primarily affects the shared store. Instead of feed, horses, and stables, the store sells roses, tickets, and hotel rooms. [[Image:HorsesPromMain.png|thumb|400px|none|The main screen in Horses for Windows Prom Edition using [http://en.wikipedia.org/wiki/Wine_%28software%29 Wine] on [http://www.opensuse.org/ Novell openSUSE 10.2]]] [[Image:HorsesPromRacing.png|thumb|400px|none|The race in Horses for Windows Prom Edition using [http://en.wikipedia.org/wiki/Wine_%28software%29 Wine] on [http://www.opensuse.org/ Novell openSUSE 10.2]]] acca756c4a79ec235e41254160e31d21042c920f 1899 1898 2007-10-14T05:11:31Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Program-horsesforwindows1 0.png|thumb|right|400px|Horses for Windows running in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]]] [[Image:HorsesDifficulty.png|thumb|right|400px|Horses for Windows running in [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1]. Four different difficulty levels exist in this game: Easy, Medium, Hard, and CATastrophe]] Horses for Windows is a [http://en.wikipedia.org/wiki/Horse_racing horse racing] [http://en.wikipedia.org/wiki/Strategy_game strategy game] written for {{Tech:Win16}}. Depending on the health and happiness of the player's and computer's horses, one horse wins a race while the other loses, though ties are possible. Between races, the player and the computer buy horse supplies from a shared store, giving priority to the player and leaving the computer with the leftovers. The objective of the game is thus to earn enough money through race betting to buy most or all supplies in the store on every round, leaving the computer's horse unhealthy and unhappy. Horses was inspired by a horse racing program that Robert "Bobby" Zoller, a friend in high school, wrote on a [http://en.wikipedia.org/wiki/TI-81 TI-81 graphing calculator]. That game used dots to represent the horses as they moved across the screen. Horses for Windows applied that same concept with graphics and added the shared store to make it a strategy game. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/horses.zip Download Horses for Windows]''' *'''[https://www.moonlightdesign.org/steve/programs/ghsprom.exe Download Horses for Windows, Prom Edition]''', which is a variant that I wrote for the [http://en.wikipedia.org/wiki/Prom prom] while in high school ==Screen Shots== {| |[[Image:HorsesPlay.png|thumb|300px|none|The main game play screen, which lets the player place a bet for the race. A bet of zero dollars is permitted, but a negative bet is not allowed]] |[[Image:HorsesShop.png|thumb|350px|none|The shop. Although you can buy more than one horse, only one is used in the race, and at least one is required to race]] |- |[[Image:HorsesProgman.png|thumb|300px|none|The icons added by the installer in the [http://en.wikipedia.org/wiki/Program_Manager Windows Program Manager]]] |[[Image:HorsesAbout.png|thumb|350px|none|The program's "about" screen]] |} ==Cheating== To facilitate easy cheating, I wrote a saved game editor that enables users to adjust the attributes of their horse as well as the computer's horse, the supply levels at the shared shop, and the odds of winning the next race. [[Image:HorseEdit.png|thumb|300px|none|The Horses for Windows saved game editor]] ==Prom Edition== In 1997, I [https://www.moonlightdesign.org/steve/programs/ghsprom.exe adapted] Horses for Windows to have a [http://en.wikipedia.org/wiki/Prom prom] theme, which primarily affects the shared store. Instead of feed, horses, and stables, the store sells roses, tickets, and hotel rooms. [[Image:HorsesPromMain.png|thumb|400px|none|The main screen in Horses for Windows Prom Edition using [http://en.wikipedia.org/wiki/Wine_%28software%29 Wine] on [http://www.opensuse.org/ Novell openSUSE 10.2]]] [[Image:HorsesPromRacing.png|thumb|400px|none|The race in Horses for Windows Prom Edition using [http://en.wikipedia.org/wiki/Wine_%28software%29 Wine] on [http://www.opensuse.org/ Novell openSUSE 10.2]]] 114941f290a9359ac99b3cfa64cad93efdc7ebc1 File:HorsesPromMain.png 6 1570 1877 2007-10-14T03:24:00Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:HorsesPromRacing.png 6 1571 1878 2007-10-14T03:24:09Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:KittyCatCommWin31.png 6 1572 1880 2007-10-14T03:29:39Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:SafeZone3.png 6 1573 1884 2007-10-14T03:39:36Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:BryantPrideServerDown.png 6 1574 1885 2007-10-14T03:56:17Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:BryantPridePHPMain.png 6 1575 1887 2007-10-14T04:07:57Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:BryantPridePHPWhatsNew.png 6 1576 1888 2007-10-14T04:08:14Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:DiskImager.png 6 1577 1894 2007-10-14T04:44:47Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Disk Imager 0 1578 1895 2007-10-14T04:45:31Z Stevenlawrance 1 New page: [[Image:DiskImager.png|frame|right|Disk Imager's user interface]] Disk Imager is a filesystem-agnostic floppy disk backup, restoration, verification, and erasing tool written for the [http... wikitext text/x-wiki [[Image:DiskImager.png|frame|right|Disk Imager's user interface]] Disk Imager is a filesystem-agnostic floppy disk backup, restoration, verification, and erasing tool written for the [http://en.wikipedia.org/wiki/Windows_nt Windows NT platform]. This tool permits entire floppy disks to be copied, backed up, erased, or verified using a [http://en.wikipedia.org/wiki/Disk_image disk image file] located on another drive. This program has functionality that is similar to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but has a graphical user interface. Disk Imager is handy for creating boot floppy disks from image files, among other uses. ==Download== *'''[https://www.moonlightdesign.org/steve/oldsite/programs/diskimager.exe Download Disk Imager]''' fe7600174f164e39585b2b05c5863ee52a50150c 1897 1895 2007-10-14T04:57:24Z Stevenlawrance 1 wikitext text/x-wiki [[Image:DiskImager.png|frame|right|Disk Imager's user interface]] Disk Imager is a filesystem-agnostic floppy disk backup, restoration, verification, and erasing tool written for the [http://en.wikipedia.org/wiki/Windows_nt Windows NT platform]. This tool permits entire floppy disks to be copied, backed up, erased, or verified using a [http://en.wikipedia.org/wiki/Disk_image disk image file] located on another drive. This program has functionality that is similar to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but has a graphical user interface. Disk Imager is handy for creating boot floppy disks from image files, among other uses. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/diskimager.exe Download Disk Imager]''' *'''[https://www.moonlightdesign.org/steve/programs/diskimager.zip Download the source code to Disk Imager]''' 99a2a7948629ba7d8a3a176314378e90ad0fab85 MCI SendString 0 1579 1902 2007-10-14T05:26:10Z Stevenlawrance 1 New page: [[Image:Program-mcisendstring.png|thumb|200px|The main program window of MCI SendString]] MCI SendString is a text command front-end to the [http://en.wikipedia.org/wiki/Media_Control_Inte... wikitext text/x-wiki [[Image:Program-mcisendstring.png|thumb|200px|The main program window of MCI SendString]] MCI SendString is a text command front-end to the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)]. It might be one of the few text-based multimedia programs for Windows to take this approach. The implementation is trivial as the MCI interface accepts text commands, making MCI SendString a simple front-end. [[Image:Program-mcisendstring2.png|frame|none|The command window in MCI SendString]] ==Download== *'''[https://www.moonlightdesign.org/steve/programs/mcisendstring.zip Download MCI SendString and its source code]''' 7c9d72df297fffc1e57bf8fe3f37acfb78b09294 1903 1902 2007-10-14T05:27:03Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Program-mcisendstring.png|thumb|200px|The main program window of MCI SendString]] MCI SendString is a text command front-end to the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)]. It might be one of the few text-based multimedia programs for Windows to take this approach. The implementation is trivial as the MCI interface accepts text commands, making MCI SendString a simple front-end. [[Image:Program-mcisendstring2.png|thumb|400px|none|The command window in MCI SendString]] ==Download== *'''[https://www.moonlightdesign.org/steve/programs/mcisendstring.zip Download MCI SendString and its source code]''' 64be4496a930f360dfd2f75dea92947371e653a1 1904 1903 2007-10-14T05:28:28Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Program-mcisendstring.png|thumb|200px|The main program window of MCI SendString. The background picture was created using [http://en.wikipedia.org/wiki/Deluxe_Paint_Animation Deluxe Paint Animation]]] MCI SendString is a text command front-end to the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)]. It might be one of the few text-based multimedia programs for Windows to take this approach. The implementation is trivial as the MCI interface accepts text commands, making MCI SendString a simple front-end. [[Image:Program-mcisendstring2.png|thumb|400px|none|The command window in MCI SendString]] ==Download== *'''[https://www.moonlightdesign.org/steve/programs/mcisendstring.zip Download MCI SendString and its source code]''' c85b91cd876f43dc32e64abebfd6c3c6fb263043 Steven Lawrance 0 1409 1907 1906 2007-10-14T05:42:18Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| ||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995-1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}||0||1994-1995 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide [http://en.wikipedia.org/wiki/BitBLT bit blit-like] operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was never finished, but I have the source code available for download if you want to finish it or use bits and pieces||{{Tech:Java}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 5edd7d0e0a945fa1f324feeb0d082bbb985d767a 1912 1907 2007-10-14T14:40:48Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| ||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995-1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}||0||1994-1995 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide [http://en.wikipedia.org/wiki/BitBLT bit blit-like] operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A musical project that I did during the first year of Computer Science in high school||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program, making this more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] e10273d0dd8b7bdf701baff9732fe0da7f9c8ad8 1915 1912 2007-10-14T15:26:50Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| ||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995-1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}||0||1994-1995 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide [http://en.wikipedia.org/wiki/BitBLT bit blit-like] operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}|| || |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program, making this more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 17ecd77a5a191bf7882ddbb86cf0ee0175dc7f5e 1917 1915 2007-10-14T15:40:46Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| ||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995-1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}||0||1994-1995 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide [http://en.wikipedia.org/wiki/BitBLT bit blit-like] operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}|| || |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}||349||1994 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program, making this more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 7cb2e5756bc569c570e051756df2b1144624ea5f 1921 1917 2007-10-14T16:13:55Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| ||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995-1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}||0||1994-1995 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide [http://en.wikipedia.org/wiki/BitBLT bit blit-like] operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}||260||1995 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}||349||1994 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program, making this more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 7deeba5739eb8a4aeb5008c92d8f78c63c5a6278 1922 1921 2007-10-14T16:14:36Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| ||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995-1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}||0||1994-1995 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}||260||1995 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}||349||1994 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program, making this more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 7a4eb2424f7a0ce49e5db74b2f98022b06a78fcb 1924 1922 2007-10-14T16:25:43Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| ||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}||0||1994-1995 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C++}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}||611||1994 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program, making this more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 840c5df8a31303425b12d357cbdcb532f6077128 1925 1924 2007-10-14T16:26:25Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| ||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}||0||1994-1995 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C++}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program, making this more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] cf71c34e5a7dba1e41a3cb58b3df260082abaf03 1927 1925 2007-10-14T16:29:33Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| ||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}||0||1994-1995 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[AriesType]]||A typing program that I made while a freshman in high school||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program, making this more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] b6e8399ed29786ad61b4b2af71e670fca3728bf1 1939 1927 2007-10-14T18:48:27Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| ||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}||0||1994-1995 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program, making this more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] a4361422c9e9aa3ef38b4273a34171ec434b357f 1940 1939 2007-10-14T18:50:23Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| ||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}||0||1994-1995 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program, making this more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 3e22011649f8c7acba88d64960259219210af55d 1941 1940 2007-10-14T18:51:01Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| ||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||My first multithreaded Win32 program that I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}||0||1994-1995 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program, making this more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 746f61d5c7841af71e02d63fb7c43eff4a3c07eb 1944 1941 2007-10-14T19:47:27Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| ||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}||0||1994-1995 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Win16 console and MIDI library that I wrote so that students at Grapevine High School in Computer Science I classes could use MIDI in their music projects using Borland's Turbo Pascal. They now teach C++, and I subsequently made a 32-bit version of the library but this time using Win32's native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program, making this more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 66f79c306088ebef5db73d0a4f65fc8334099cac TrackTrek 0 1580 1908 2007-10-14T14:27:27Z Stevenlawrance 1 New page: TrackTrek was meant to be a track meet data entry and reporting application, but did not get far due to being sparsely developed for free over one and a half years. At the time, I did not ... wikitext text/x-wiki TrackTrek was meant to be a track meet data entry and reporting application, but did not get far due to being sparsely developed for free over one and a half years. At the time, I did not have much experience with requirements elicitation, scoping, and budgeting, leading to the collapse of the project. Fortunately, the project did expose me to {{Tech:Java}} programming as well as Java's [http://en.wikipedia.org/wiki/Abstract_Window_Toolkit abstract window toolkit (AWT)] and socket networking capabilities. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/tracktrek.zip Download TrackTrek '97 and its source code]''' ==Screen Shots== {| |[[Image:Program-tracktrek1.png|thumb|300px|none|The TrackTrek server is up and running]] |[[Image:Program-tracktrek2.png|thumb|400px|none|A "ping" client for the server that retrieves information from the TrackTrek server]] |- |colspan="2"|[[Image:Program-tracktrek3.png|thumb|400px|none|The "ping" reply from the server was successful]] |} d2b529709f65b827e5cd4f7bfb8ba6cc3823d6b9 1909 1908 2007-10-14T14:28:58Z Stevenlawrance 1 wikitext text/x-wiki TrackTrek was meant to be a track meet data entry and reporting application, but it did not get far due to being sparsely developed for free over one and a half years. I was in high school at the time, and I did not have sufficient experience with requirements elicitation, scoping, and budgeting, leading to the eventual abandonment of the project. Fortunately, the project did expose me to {{Tech:Java}} programming as well as its [http://en.wikipedia.org/wiki/Abstract_Window_Toolkit abstract window toolkit (AWT)] and socket networking capabilities. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/tracktrek.zip Download TrackTrek '97 and its source code]''' ==Screen Shots== {| |[[Image:Program-tracktrek1.png|thumb|300px|none|The TrackTrek server is up and running]] |[[Image:Program-tracktrek2.png|thumb|400px|none|A "ping" client for the server that retrieves information from the TrackTrek server]] |- |colspan="2"|[[Image:Program-tracktrek3.png|thumb|400px|none|The "ping" reply from the server was successful]] |} 02eb2a7d53ed68959ea9efd4bb30965845653507 1910 1909 2007-10-14T14:36:03Z Stevenlawrance 1 wikitext text/x-wiki TrackTrek was meant to be a track meet data entry and reporting application, but it did not get far due to being sparsely developed for free over one and a half years. I was in high school at the time, and I did not have sufficient experience with requirements elicitation, scoping, and budgeting, leading to the eventual abandonment of the project. Fortunately, the project did expose me to {{Tech:Java}} programming as well as its [http://en.wikipedia.org/wiki/Abstract_Window_Toolkit abstract window toolkit (AWT)] and socket networking capabilities. This project was developed using [http://en.wikipedia.org/wiki/Visual_J%2B%2B Microsoft Visual J++], which permitted the [http://en.wikipedia.org/wiki/Class_file Java class files] to be compiled into [http://en.wikipedia.org/wiki/Portable_Executable EXE files] for use with Microsoft's Java virtual machine, which is now defunct. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/tracktrek.zip Download TrackTrek '97 and its source code]''' ==Screen Shots== {| |[[Image:Program-tracktrek1.png|thumb|300px|none|The TrackTrek server is up and running]] |[[Image:Program-tracktrek2.png|thumb|400px|none|A "ping" client for the server that retrieves information from the TrackTrek server]] |- |colspan="2"|[[Image:Program-tracktrek3.png|thumb|400px|none|The "ping" reply from the server was successful]] |} 2e58c1d3c103205c962574931db6451705d96dcd Template:Tech:AWT 10 1581 1911 2007-10-14T14:40:32Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Abstract_Window_Toolkit AWT] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Abstract_Window_Toolkit AWT] 3da6ce7a9346f1249ca40dd97583436074967df5 TSNHead 0 1582 1913 2007-10-14T15:00:03Z Stevenlawrance 1 New page: TSNHead was a {{Tech:BASIC}} program that kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)] from [http://en.... wikitext text/x-wiki TSNHead was a {{Tech:BASIC}} program that kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)] from [http://en.wikipedia.org/wiki/Sierra_online Sierra Online] so that my younger brother would know how much we owed him each month based on a prorated calculation of the monthly service fees. TSN had a rate structure that was similar to modern [http://en.wikipedia.org/wiki/Mobile_phone mobile telephone] plans in the [http://en.wikipedia.org/wiki/United_States United States], where the monthly service fee grants a set amount of hours, and usage over that amount incurs per-hour charges. TSNHead factored the rate plan and the overage charges into its calculations. The program's name was inspired from a TSN advertisement that resembled a [http://en.wikipedia.org/wiki/Weekly_World_News Weekly World News] headline with a claim that a baby was born with a TSN head, showing a [http://en.wikipedia.org/wiki/Pixel pixel]-block face as the baby's head. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/tsnhead.zip Download TSNHead]''' 1150c49b2891e757fde1408a3b3b187939105b70 Jingle Bells 0 1583 1914 2007-10-14T15:22:35Z Stevenlawrance 1 New page: [[Image:Program-screenwindow.png|thumb|right|450px|Screen shot of Jingle Bell's {{Tech:Win16}} port]] Jingle Bells was an academic project at the end of the first semester of my first comp... wikitext text/x-wiki [[Image:Program-screenwindow.png|thumb|right|450px|Screen shot of Jingle Bell's {{Tech:Win16}} port]] Jingle Bells was an academic project at the end of the first semester of my first computer science class. The assignment was to visually and audibly render a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song] using {{Tech:Pascal}}, and I chose to implement the [http://en.wikipedia.org/wiki/Jingle_Bells Jingle Bells song]. The original version runs on DOS as a text console program and uses the PC speaker for audio. After writing [[ScreenWindow]], I ported Jingle Bells to the {{Tech:C}} programming language and the audio to {{Tech:MIDI}}, effectively modernizing the project with a Windows interface. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/jinglebells.zip Download Jingle Bells and its source code]''' 11ae1c3b93100a3f2e3626f96fdc4529d233e67c 1916 1914 2007-10-14T15:27:40Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Program-screenwindow.png|thumb|right|450px|Screen shot of Jingle Bell's {{Tech:Win16}} port]] Jingle Bells was an academic project at the end of the first semester of my first computer science class. The assignment was to visually and audibly render a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song] using {{Tech:Pascal}}, and I chose to implement the [http://en.wikipedia.org/wiki/Jingle_Bells Jingle Bells song]. The original version runs on DOS as a text console program and uses the PC speaker for audio. After writing [[ScreenWindow]], I ported Jingle Bells to the {{Tech:C}} programming language and the audio to {{Tech:MIDI}}, effectively modernizing the project with a Windows interface. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/jinglebells.zip Download the original Jingle Bells and its source code]''' 629bcc7a82d809e8b6e79a0deb0077d6c3aa19ad 1926 1916 2007-10-14T16:28:03Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Program-screenwindow.png|thumb|right|450px|Screen shot of Jingle Bell's {{Tech:Win16}} port]] Jingle Bells was an academic project at the end of the first semester of my first computer science class. The assignment was to visually and audibly render a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song] using {{Tech:Pascal}}, and I chose to implement the [http://en.wikipedia.org/wiki/Jingle_Bells Jingle Bells song]. The original version runs on DOS as a text console program and uses the PC speaker for audio. After writing [[ScreenWindow]], I ported Jingle Bells to the {{Tech:C}} programming language and the audio to {{Tech:MIDI}}, effectively modernizing the project with a Windows interface. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/jinglebells.zip Download the original Jingle Bells and its source code]''' *'''[https://www.moonlightdesign.org/steve/programs/screenwindow.exe Download the Windows version of Jingle Bells]''', which is installed with the full installation in the "examples\jingleb" folder of [[ScreenWindow]] daeb39ceca69b2abafb105b8a6d145d27146ebae IntMap 0 1584 1918 2007-10-14T16:07:50Z Stevenlawrance 1 New page: IntMap is a library that I wrote for a larger project in my first computer science class in high school. The project was a graphical animation of a [http://en.wikipedia.org/wiki/Cat cat] e... wikitext text/x-wiki IntMap is a library that I wrote for a larger project in my first computer science class in high school. The project was a graphical animation of a [http://en.wikipedia.org/wiki/Cat cat] eating a [http://en.wikipedia.org/wiki/Fish fish] and was written in {{Tech:Pascal}} for {{Tech:DOS}}. IntMap provided the image loading, display, movement, and rotation for the project, permitting me to use scanned drawings of a cat, a fish, and a smiling sun in the scene. The scans were manually copied into text files that represented each pixel color value as a single [http://en.wikipedia.org/wiki/Integer integer] in a space-separated row of pixels for each line. These files used the "imp" extension for "integer map," which was a play on "[http://en.wikipedia.org/wiki/BMP_file_format bitmap]." One integer value is reserved for full transparency -- similar in concept to the [http://en.wikipedia.org/wiki/Graphics_Interchange_Format graphics interchange format (GIF)]. Movements and rotations are handled efficiently to require only one pass at screen drawing for each operation. Damaged regions are stored in memory before the damage, enabling proper damage recovery without having to redraw the background. ==IntMap2== IntMap2 was a port of IntMap to the {{Tech:C}} programming language that uses the [http://en.wikipedia.org/wiki/Extended_Memory_Specification extended memory specification (XMS)] for storing integer maps as well as standard [http://en.wikipedia.org/wiki/BMP_file_format bitmap (BMP) files], though IntMap2 has not been thoroughly tested. It was abandoned due to a lack of need for it. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/intmap.zip Download IntMap for Pascal]''' *'''[https://www.moonlightdesign.org/steve/programs/intmap2.zip Download IntMap2 for C and DOS]''' 516837e32739fddeb7cc10c04a2618d7adda69f4 1919 1918 2007-10-14T16:09:08Z Stevenlawrance 1 wikitext text/x-wiki IntMap is a library that I wrote for a larger project in my first computer science class in high school. The project was a graphical animation of a [http://en.wikipedia.org/wiki/Cat cat] eating a [http://en.wikipedia.org/wiki/Fish fish] and was written in {{Tech:Pascal}} for {{Tech:DOS}}. IntMap provided the image loading, display, movement, and rotation for the project, permitting me to use scanned drawings of a cat, a fish, and a smiling sun in the scene. The scans were manually copied into text files that represented each pixel color value as a single [http://en.wikipedia.org/wiki/Integer integer] in a space-separated row of pixels for each line. These files used the "imp" extension for "integer map," which was a play on "[http://en.wikipedia.org/wiki/BMP_file_format bitmap]." One integer value is reserved for full transparency -- similar in concept to the [http://en.wikipedia.org/wiki/Graphics_Interchange_Format graphics interchange format (GIF)]. Movements and rotations are handled efficiently to require only one pass at screen drawing for each operation. Damaged regions are stored in memory before the damage, enabling proper damage recovery without having to redraw the background. ==IntMap2== IntMap2 was a port of IntMap to the {{Tech:C}} programming language that uses the [http://en.wikipedia.org/wiki/Extended_Memory_Specification extended memory specification (XMS)] for storing integer maps as well as standard [http://en.wikipedia.org/wiki/BMP_file_format bitmap (BMP) files], though IntMap2 has not been thoroughly tested. It was abandoned due to a lack of need for it. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/intmap.zip Download IntMap for Pascal]''', which includes the food chain group project that my cat animation is a part of *'''[https://www.moonlightdesign.org/steve/programs/intmap2.zip Download IntMap2 for C and DOS]''' cca65a91e279582e8a97a7f9b6f96f0eadccf3cc 1920 1919 2007-10-14T16:12:06Z Stevenlawrance 1 wikitext text/x-wiki IntMap is a library that I wrote for a larger project in my first computer science class in high school. The project was a graphical animation of a [http://en.wikipedia.org/wiki/Cat cat] eating a [http://en.wikipedia.org/wiki/Fish fish] and was written in {{Tech:Pascal}} for {{Tech:DOS}}. IntMap provided the image loading, display, movement, and rotation for the project, permitting me to use scanned drawings of a cat and a fish in the scene. The scans were manually copied into text files that represented each pixel color value as a single [http://en.wikipedia.org/wiki/Integer integer] in a space-separated row of pixels for each line. These files used the "imp" extension for "integer map," which was a play on "[http://en.wikipedia.org/wiki/BMP_file_format bitmap]." One integer value is reserved for full transparency -- similar in concept to the [http://en.wikipedia.org/wiki/Graphics_Interchange_Format graphics interchange format (GIF)]. Movements and rotations are handled efficiently to require only one pass at screen drawing for each operation. Damaged regions are stored in memory before the damage, enabling proper damage recovery without having to redraw the background. ==IntMap2== IntMap2 was a port of IntMap to the {{Tech:C}} programming language that uses the [http://en.wikipedia.org/wiki/Extended_Memory_Specification extended memory specification (XMS)] for storing integer maps as well as standard [http://en.wikipedia.org/wiki/BMP_file_format bitmap (BMP) files], though IntMap2 has not been thoroughly tested. It was abandoned due to a lack of need for it. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/intmap.zip Download IntMap for Pascal]''', which includes the food chain group project that my cat animation is a part of *'''[https://www.moonlightdesign.org/steve/programs/intmap2.zip Download IntMap2 for C and DOS]''' 5f67a4a6ed2a88a353f5b59965761a8ed131af92 1923 1920 2007-10-14T16:15:18Z Stevenlawrance 1 wikitext text/x-wiki IntMap is a library that I wrote for a larger project in my first computer science class in high school. The project was a graphical animation of a [http://en.wikipedia.org/wiki/Cat cat] eating a [http://en.wikipedia.org/wiki/Fish fish] and was written in {{Tech:Pascal}} for {{Tech:DOS}}. IntMap provided the image loading, display, movement, and rotation for the project, permitting me to use scanned drawings of a cat and a fish in the scene. The scans were manually copied into text files that represented each pixel color value as a single [http://en.wikipedia.org/wiki/Integer integer] in a space-separated row of pixels for each line. These files used the "imp" extension for "integer map," which was a play on "[http://en.wikipedia.org/wiki/BMP_file_format bitmap]." One integer value is reserved for full transparency -- similar in concept to the [http://en.wikipedia.org/wiki/Graphics_Interchange_Format graphics interchange format (GIF)]. Movements and rotations are handled efficiently to require only one pass at screen drawing for each operation. Damaged regions are stored in memory before the damage, enabling proper damage recovery without having to redraw the background. ==IntMap2== IntMap2 was a port of IntMap to the {{Tech:C}} programming language that uses the [http://en.wikipedia.org/wiki/Extended_Memory_Specification extended memory specification (XMS)] for storing integer maps as well as standard [http://en.wikipedia.org/wiki/BMP_file_format bitmap (BMP) files], though IntMap2 has not been thoroughly tested. It was abandoned due to a lack of need for it. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/intmap.zip Download IntMap for Pascal]''', which includes the food chain group project that my cat animation is a part of *'''[https://www.moonlightdesign.org/steve/programs/intmap2.zip Download IntMap2 for C and DOS]''', which might not work as it's not well-tested f7a1d85a03c1d8c29f86bd98dea9db675f04531f File:AriesType-StudentMenu.png 6 1585 1928 2007-10-14T18:39:07Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:AriesType-TypingResults.png 6 1586 1929 2007-10-14T18:39:21Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:AriesType-EmailPage1.png 6 1587 1930 2007-10-14T18:39:32Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:AriesType-EmailPage2.png 6 1588 1931 2007-10-14T18:39:42Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:AriesType-EditStudentMenuItems.png 6 1589 1932 2007-10-14T18:39:52Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:AriesType-TeacherMenu.png 6 1590 1933 2007-10-14T18:40:02Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:AriesType-GraphicalTeacherMenu.png 6 1591 1934 2007-10-14T18:40:15Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:AriesType-EmailReader.png 6 1592 1935 2007-10-14T18:40:25Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 1945 1935 2007-10-14T20:19:13Z Stevenlawrance 1 uploaded a new version of "[[Image:AriesType-EmailReader.png]]": Version from the final installer wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:AriesType-GraphicalTeacherStartup.png 6 1593 1936 2007-10-14T18:40:37Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:AriesType-Typing.png 6 1594 1937 2007-10-14T18:40:46Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 1946 1937 2007-10-14T20:28:18Z Stevenlawrance 1 uploaded a new version of "[[Image:AriesType-Typing.png]]" wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:AriesType-EmailReader2.png 6 1595 1938 2007-10-14T18:40:55Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Template:Tech:BASIC 10 1523 1942 1766 2007-10-14T18:56:04Z Stevenlawrance 1 wikitext text/x-wiki [http://en.wikipedia.org/wiki/QBASIC_programming_language QBASIC] 235dd73b9df06998c494f5447c5799e783c3dca8 AriesType 0 1596 1943 2007-10-14T18:58:08Z Stevenlawrance 1 New page: [[Image:AriesType-GraphicalTeacherStartup.png|thumb|300px|right|Screen shot of the unfinished graphical version of AriesType. Brian Dougher, a friend, helped out with the graphics and used... wikitext text/x-wiki [[Image:AriesType-GraphicalTeacherStartup.png|thumb|300px|right|Screen shot of the unfinished graphical version of AriesType. Brian Dougher, a friend, helped out with the graphics and used his BASIC compiler to generate [http://en.wikipedia.org/wiki/EXE EXE] files from the {{Tech:BASIC}} source code]] AriesType was a [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities. At the time, I had penned some of my software as Aries Software or a variant, though Aries Software was simply an unregistered alter-ego of me. ''More being written..'' 42c15473cfba42652bfb61256021369775913c5e 1951 1943 2007-10-14T20:57:32Z Stevenlawrance 1 wikitext text/x-wiki [[Image:AriesType-Splash.png|thumb|400px|right|AriesType's credits. Brian Dougher, a friend, helped out with the graphics and used his BASIC compiler to generate [http://en.wikipedia.org/wiki/EXE EXE] files from the {{Tech:BASIC}} source code]] AriesType was a [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities. At the time, I had penned some of my software as Aries Software or a variant, though Aries Software was simply an unregistered alter-ego of me. I wrote AriesType in lieu of taking an introductory computer class in high school, and the work primarily occurred during class hours in the same classroom. My past experience at the time with computers and software enabled that position, though I still had to be at school during school hours. This project was my first network-enabled multi-user application and was worthwhile for learning about related concerns. AriesType was completed as a working product, though its real-time student typing playback feature was never finished. The typing playback feature would have simulated what the screen looked like for a selected student's typing session, including delays and mistakes, though this likely would not have given much value to teachers. This and the email and paging features are a classic example of [http://en.wikipedia.org/wiki/Gold_plating_%28disambiguation%29 gold plating] that less-experienced software engineers suffer from. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/ariestype.exe Download the AriesType installer]''', which uses [[CatSetup]] for an easy installation instead of AriesType's own installer ==Screen Shots== {| |[[Image:AriesType-GraphicalTeacherStartup.png|thumb|300px|none|The unfinished graphical version of AriesType. Only the teacher's menu had a graphical alternative]] |[[Image:AriesType-StudentMenu.png|thumb|400px|none|The student's menu. Menu item accessibility is controlled for each student by the teacher. If the exit option is disabled, then attempting to exit tells the student to reboot the computer]] |- |[[Image:AriesType-TeacherMenu.png|thumb|400px|none|The text version of the teacher's menu. Real-time playback of the student's typing was not finished, which is shown as the first item in the menu. In retrospect, such a feature is likely of little or no value to teachers]] |[[Image:AriesType-GraphicalTeacherMenu.png|thumb|400px|none|The graphical version of the teacher's menu with the paging submenu shown. Students can page teachers, similar to how a [http://en.wikipedia.org/wiki/Pager mobile pager] operates, but unlike [http://en.wikipedia.org/wiki/Instant_messaging instant messaging], a teacher must check for pages, and pages to not contain anything other than the name of the student who paged]] |- |[[Image:AriesType-SysopMenu.png|thumb|400px|none|The system operator's menu]] |[[Image:AriesType-Typing.png|thumb|400px|none|View of a student typing sentences. AriesType collects metrics on accuracy and timing as the student types]] |- |[[Image:AriesType-TypingResults.png|thumb|400px|none|The results of a student's typing efforts, which is shown to the student after they finish. The teacher can also retrieve these results as it's stored on the network]] |[[ |} 9b736ffbf914590be0327bae0da7db83736eb63c 1952 1951 2007-10-14T21:06:58Z Stevenlawrance 1 wikitext text/x-wiki [[Image:AriesType-Splash.png|thumb|400px|right|AriesType's credits. Brian Dougher, a friend, helped out with the graphics and used his BASIC compiler to generate [http://en.wikipedia.org/wiki/EXE EXE] files from the {{Tech:BASIC}} source code]] AriesType was a [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities. At the time, I had penned some of my software as Aries Software or a variant, though Aries Software was simply an unregistered alter-ego of me. I wrote AriesType in lieu of taking an introductory computer class in high school, and the work primarily occurred during class hours in the same classroom. My past experience at the time with computers and software enabled that position, though I still had to be at school during school hours. This project was my first network-enabled multi-user application and was worthwhile for learning about related concerns. AriesType was completed as a working product, though its real-time student typing playback feature was never finished. The typing playback feature would have simulated what the screen looked like for a selected student's typing session, including delays and mistakes, though this likely would not have given much value to teachers. This and the email and paging features are a classic example of [http://en.wikipedia.org/wiki/Gold_plating_%28disambiguation%29 gold plating] that less-experienced software engineers suffer from. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/ariestype.exe Download the AriesType installer]''', which uses [[CatSetup]] for an easy installation instead of AriesType's own installer ==Screen Shots== {| |[[Image:AriesType-GraphicalTeacherStartup.png|thumb|300px|none|The unfinished graphical version of AriesType. Only the teacher's menu had a graphical alternative]] |[[Image:AriesType-StudentMenu.png|thumb|400px|none|The student's menu. Menu item accessibility is controlled for each student by the teacher. If the exit option is disabled, then attempting to exit tells the student to reboot the computer]] |- |[[Image:AriesType-TeacherMenu.png|thumb|400px|none|The text version of the teacher's menu. Real-time playback of the student's typing was not finished, which is shown as the first item in the menu. In retrospect, such a feature is likely of little or no value to teachers]] |[[Image:AriesType-GraphicalTeacherMenu.png|thumb|400px|none|The graphical version of the teacher's menu with the paging submenu shown. Students can page teachers, similar to how a [http://en.wikipedia.org/wiki/Pager mobile pager] operates, but unlike [http://en.wikipedia.org/wiki/Instant_messaging instant messaging], a teacher must check for pages, and pages to not contain anything other than the name of the student who paged]] |- |[[Image:AriesType-SysopMenu.png|thumb|400px|none|The system operator's menu]] |[[Image:AriesType-Typing.png|thumb|400px|none|View of a student typing sentences. AriesType collects metrics on accuracy and timing as the student types]] |- |[[Image:AriesType-TypingResults.png|thumb|400px|none|The results of a student's typing efforts, which are shown to the student after they finish. The teacher can also retrieve these results as they are stored on the network]] |[[Image:AriesType-EmailPage1.png|thumb|400px|none|AriesType's email setup screen, which asks for the destination user and the subject line. The sender needs to get the destination name exactly correct or else risk having the recipient not seeing the message, and no warning is given to the sender if that happens]] |- |[[Image:AriesType-EmailPage2.png|thumb|400px|none|The message's contents were typed in one line at a time, and it was not possible to return to a previous line after the [Enter] key was pressed. Messages had a limit of 15 lines]] |[[Image:AriesType-EmailReader2.png|thumb|400px|none|The student, who was the recipient of the email in the previous screen shot, receives the message when they check for mail]] |- |[[Image:AriesType-EmailReader.png|thumb|400px|none|AriesType included an initial email with the installation that highlighted my ego at the time]] | |} d83d5252872279273f081aa97396096f2f0f2a55 1953 1952 2007-10-14T21:08:51Z Stevenlawrance 1 /* Screen Shots */ wikitext text/x-wiki [[Image:AriesType-Splash.png|thumb|400px|right|AriesType's credits. Brian Dougher, a friend, helped out with the graphics and used his BASIC compiler to generate [http://en.wikipedia.org/wiki/EXE EXE] files from the {{Tech:BASIC}} source code]] AriesType was a [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities. At the time, I had penned some of my software as Aries Software or a variant, though Aries Software was simply an unregistered alter-ego of me. I wrote AriesType in lieu of taking an introductory computer class in high school, and the work primarily occurred during class hours in the same classroom. My past experience at the time with computers and software enabled that position, though I still had to be at school during school hours. This project was my first network-enabled multi-user application and was worthwhile for learning about related concerns. AriesType was completed as a working product, though its real-time student typing playback feature was never finished. The typing playback feature would have simulated what the screen looked like for a selected student's typing session, including delays and mistakes, though this likely would not have given much value to teachers. This and the email and paging features are a classic example of [http://en.wikipedia.org/wiki/Gold_plating_%28disambiguation%29 gold plating] that less-experienced software engineers suffer from. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/ariestype.exe Download the AriesType installer]''', which uses [[CatSetup]] for an easy installation instead of AriesType's own installer ==Screen Shots== ===Menus=== {| |[[Image:AriesType-GraphicalTeacherStartup.png|thumb|300px|none|The unfinished graphical version of AriesType. Only the teacher's menu had a graphical alternative]] |[[Image:AriesType-StudentMenu.png|thumb|400px|none|The student's menu. Menu item accessibility is controlled for each student by the teacher. If the exit option is disabled, then attempting to exit tells the student to reboot the computer]] |- |[[Image:AriesType-TeacherMenu.png|thumb|400px|none|The text version of the teacher's menu. Real-time playback of the student's typing was not finished, which is shown as the first item in the menu. In retrospect, such a feature is likely of little or no value to teachers]] |[[Image:AriesType-GraphicalTeacherMenu.png|thumb|400px|none|The graphical version of the teacher's menu with the paging submenu shown. Students can page teachers, similar to how a [http://en.wikipedia.org/wiki/Pager mobile pager] operates, but unlike [http://en.wikipedia.org/wiki/Instant_messaging instant messaging], a teacher must check for pages, and pages to not contain anything other than the name of the student who paged]] |- |[[Image:AriesType-SysopMenu.png|thumb|400px|none|The system operator's menu]] |} ===Typing=== {| |[[Image:AriesType-Typing.png|thumb|400px|none|View of a student typing sentences. AriesType collects metrics on accuracy and timing as the student types]] |[[Image:AriesType-TypingResults.png|thumb|400px|none|The results of a student's typing efforts, which are shown to the student after they finish. The teacher can also retrieve these results as they are stored on the network]] |} ===Email=== {| |[[Image:AriesType-EmailPage1.png|thumb|400px|none|AriesType's email setup screen, which asks for the destination user and the subject line. The sender needs to get the destination name exactly correct or else risk having the recipient not seeing the message, and no warning is given to the sender if that happens]] |[[Image:AriesType-EmailPage2.png|thumb|400px|none|The message's contents were typed in one line at a time, and it was not possible to return to a previous line after the [Enter] key was pressed. Messages had a limit of 15 lines]] |- |[[Image:AriesType-EmailReader2.png|thumb|400px|none|The student, who was the recipient of the email in the previous screen shot, receives the message when they check for mail]] |[[Image:AriesType-EmailReader.png|thumb|400px|none|AriesType included an initial email with the installation that highlighted my ego at the time]] |} 42ca36834a9895f191403fc7f6a287ceadd6155d 1954 1953 2007-10-14T21:16:14Z Stevenlawrance 1 wikitext text/x-wiki [[Image:AriesType-Splash.png|thumb|400px|right|AriesType's credits. Brian Dougher, a friend, helped out with the graphics and used his BASIC compiler to generate [http://en.wikipedia.org/wiki/EXE EXE] files from the {{Tech:BASIC}} source code]] AriesType was a [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities. At the time, I had penned some of my software as Aries Software or a variant, though Aries Software was simply an unregistered alter-ego of me. I wrote AriesType in lieu of taking an introductory computer class in high school, and the work primarily occurred during class hours in the same classroom. My past experience at the time with computers and software enabled that position, though I still had to be at school during school hours. This project was my first network-enabled multi-user application and was worthwhile for learning about related concerns. AriesType was completed as a working product, though its real-time student typing playback feature was never finished. The typing playback feature would have simulated what the screen looked like for a selected student's typing session, including delays and mistakes, though this likely would not have given much value to teachers. This and the email and paging features are classic examples of [http://en.wikipedia.org/wiki/Gold_plating_%28disambiguation%29 gold plating] that less-experienced software engineers suffer from. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/ariestype.exe Download the AriesType installer]''', which uses [[CatSetup]] for an easy installation instead of AriesType's own installer ==Screen Shots== ===Typing=== Students touch type sentences into AriesType while the system logs the character and timing of each keystroke for later playback. {| |[[Image:AriesType-Typing.png|thumb|400px|none|View of a student typing sentences. AriesType collects metrics on accuracy and timing as the student types]] |[[Image:AriesType-TypingResults.png|thumb|400px|none|The results of a student's typing efforts, which are shown to the student after they finish. The teacher can also retrieve these results as they are stored on the network]] |} ===Sentence Editor=== Teachers can edit and choose the set of sentences that students type. {| |[[Image:AriesType-SentenceEditMenu.png|thumb|400px|none|Sentence editor menu, which also lets a teacher import sentences from an expansion floppy disk or another directory]] |[[Image:AriesType-SentenceEditor.png|thumb|400px|none|The sentence editor, which allows editing of one line at a time]] |} ===Menus=== AriesType displayed a different menu to students, teachers, and system operators. {| |[[Image:AriesType-GraphicalTeacherStartup.png|thumb|300px|none|The unfinished graphical version of AriesType. Only the teacher's menu had a graphical alternative]] |[[Image:AriesType-StudentMenu.png|thumb|400px|none|The student's menu. Menu item accessibility is controlled for each student by the teacher. If the exit option is disabled, then attempting to exit tells the student to reboot the computer]] |- |[[Image:AriesType-TeacherMenu.png|thumb|400px|none|The text version of the teacher's menu. Real-time playback of the student's typing was not finished, which is shown as the first item in the menu. In retrospect, such a feature is likely of little or no value to teachers]] |[[Image:AriesType-GraphicalTeacherMenu.png|thumb|400px|none|The graphical version of the teacher's menu with the paging submenu shown. Students can page teachers, similar to how a [http://en.wikipedia.org/wiki/Pager mobile pager] operates, but unlike [http://en.wikipedia.org/wiki/Instant_messaging instant messaging], a teacher must check for pages, and pages to not contain anything other than the name of the student who paged]] |- |[[Image:AriesType-SysopMenu.png|thumb|400px|none|The system operator's menu]] |} ===Email=== AriesType supported a limited form of local-only email. Users could not communicate with people outside of a network's AriesType installation using this system. {| |[[Image:AriesType-EmailPage1.png|thumb|400px|none|AriesType's email setup screen, which asks for the destination user and the subject line. The sender needs to get the destination name exactly correct or else risk having the recipient not seeing the message, and no warning is given to the sender if that happens]] |[[Image:AriesType-EmailPage2.png|thumb|400px|none|The message's contents were typed in one line at a time, and it was not possible to return to a previous line after the [Enter] key was pressed. Messages had a limit of 15 lines]] |- |[[Image:AriesType-EmailReader2.png|thumb|400px|none|The student, who was the recipient of the email in the previous screen shot, receives the message when they check for mail]] |[[Image:AriesType-EmailReader.png|thumb|400px|none|AriesType included an initial email with the installation that highlighted my ego at the time]] |} e6229b9213394af4e80f315a8abca020c780db0c 1955 1954 2007-10-14T21:17:06Z Stevenlawrance 1 wikitext text/x-wiki [[Image:AriesType-Splash.png|thumb|400px|right|AriesType's credits. Brian Dougher, a friend, helped out with the graphics and used his BASIC compiler to generate [http://en.wikipedia.org/wiki/EXE EXE] files from the {{Tech:BASIC}} source code]] AriesType was a [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities. At the time, I had penned some of my software as Aries Software or a variant, though Aries Software was simply an unregistered alter-ego of me. I wrote AriesType in lieu of taking an introductory computer class in high school, and the work primarily occurred during class hours in the same classroom. My past experience at the time with computers and software enabled that position. This project was my first network-enabled multi-user application and was worthwhile for learning about related concerns. AriesType was completed as a working product, though its real-time student typing playback feature was never finished. The typing playback feature would have simulated what the screen looked like for a selected student's typing session, including delays and mistakes, though this likely would not have given much value to teachers. This and the email and paging features are classic examples of [http://en.wikipedia.org/wiki/Gold_plating_%28disambiguation%29 gold plating] that less-experienced software engineers suffer from. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/ariestype.exe Download the AriesType installer]''', which uses [[CatSetup]] for an easy installation instead of AriesType's own installer ==Screen Shots== ===Typing=== Students touch type sentences into AriesType while the system logs the character and timing of each keystroke for later playback. {| |[[Image:AriesType-Typing.png|thumb|400px|none|View of a student typing sentences. AriesType collects metrics on accuracy and timing as the student types]] |[[Image:AriesType-TypingResults.png|thumb|400px|none|The results of a student's typing efforts, which are shown to the student after they finish. The teacher can also retrieve these results as they are stored on the network]] |} ===Sentence Editor=== Teachers can edit and choose the set of sentences that students type. {| |[[Image:AriesType-SentenceEditMenu.png|thumb|400px|none|Sentence editor menu, which also lets a teacher import sentences from an expansion floppy disk or another directory]] |[[Image:AriesType-SentenceEditor.png|thumb|400px|none|The sentence editor, which allows editing of one line at a time]] |} ===Menus=== AriesType displayed a different menu to students, teachers, and system operators. {| |[[Image:AriesType-GraphicalTeacherStartup.png|thumb|300px|none|The unfinished graphical version of AriesType. Only the teacher's menu had a graphical alternative]] |[[Image:AriesType-StudentMenu.png|thumb|400px|none|The student's menu. Menu item accessibility is controlled for each student by the teacher. If the exit option is disabled, then attempting to exit tells the student to reboot the computer]] |- |[[Image:AriesType-TeacherMenu.png|thumb|400px|none|The text version of the teacher's menu. Real-time playback of the student's typing was not finished, which is shown as the first item in the menu. In retrospect, such a feature is likely of little or no value to teachers]] |[[Image:AriesType-GraphicalTeacherMenu.png|thumb|400px|none|The graphical version of the teacher's menu with the paging submenu shown. Students can page teachers, similar to how a [http://en.wikipedia.org/wiki/Pager mobile pager] operates, but unlike [http://en.wikipedia.org/wiki/Instant_messaging instant messaging], a teacher must check for pages, and pages to not contain anything other than the name of the student who paged]] |- |[[Image:AriesType-SysopMenu.png|thumb|400px|none|The system operator's menu]] |} ===Email=== AriesType supported a limited form of local-only email. Users could not communicate with people outside of a network's AriesType installation using this system. {| |[[Image:AriesType-EmailPage1.png|thumb|400px|none|AriesType's email setup screen, which asks for the destination user and the subject line. The sender needs to get the destination name exactly correct or else risk having the recipient not seeing the message, and no warning is given to the sender if that happens]] |[[Image:AriesType-EmailPage2.png|thumb|400px|none|The message's contents were typed in one line at a time, and it was not possible to return to a previous line after the [Enter] key was pressed. Messages had a limit of 15 lines]] |- |[[Image:AriesType-EmailReader2.png|thumb|400px|none|The student, who was the recipient of the email in the previous screen shot, receives the message when they check for mail]] |[[Image:AriesType-EmailReader.png|thumb|400px|none|AriesType included an initial email with the installation that highlighted my ego at the time]] |} 7ec6602e3d95cb70bcf4f775723398ebc3f5978a 1956 1955 2007-10-14T21:18:58Z Stevenlawrance 1 /* Screen Shots */ wikitext text/x-wiki [[Image:AriesType-Splash.png|thumb|400px|right|AriesType's credits. Brian Dougher, a friend, helped out with the graphics and used his BASIC compiler to generate [http://en.wikipedia.org/wiki/EXE EXE] files from the {{Tech:BASIC}} source code]] AriesType was a [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities. At the time, I had penned some of my software as Aries Software or a variant, though Aries Software was simply an unregistered alter-ego of me. I wrote AriesType in lieu of taking an introductory computer class in high school, and the work primarily occurred during class hours in the same classroom. My past experience at the time with computers and software enabled that position. This project was my first network-enabled multi-user application and was worthwhile for learning about related concerns. AriesType was completed as a working product, though its real-time student typing playback feature was never finished. The typing playback feature would have simulated what the screen looked like for a selected student's typing session, including delays and mistakes, though this likely would not have given much value to teachers. This and the email and paging features are classic examples of [http://en.wikipedia.org/wiki/Gold_plating_%28disambiguation%29 gold plating] that less-experienced software engineers suffer from. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/ariestype.exe Download the AriesType installer]''', which uses [[CatSetup]] for an easy installation instead of AriesType's own installer ==Screen Shots== ===Typing=== Students touch type sentences into AriesType while the system logs the character and timing of each keystroke for later playback. {| |[[Image:AriesType-Typing.png|thumb|400px|none|View of a student typing sentences. AriesType collects metrics on accuracy and timing as the student types]] |[[Image:AriesType-TypingResults.png|thumb|400px|none|The results of a student's typing efforts, which are shown to the student after they finish. The teacher can also retrieve these results as they are stored on the network]] |} ===Sentence Editor=== Teachers can edit and choose the set of sentences that students type. {| |[[Image:AriesType-SentenceEditMenu.png|thumb|400px|none|Sentence editor menu, which also lets a teacher import sentences from an expansion floppy disk or another directory]] |[[Image:AriesType-SentenceEditor.png|thumb|400px|none|The sentence editor, which allows editing of one line at a time]] |} ===Menus=== AriesType displayed a different menu to students, teachers, and system operators. {| |[[Image:AriesType-GraphicalTeacherStartup.png|thumb|300px|none|The unfinished graphical version of AriesType. Only the teacher's menu had a graphical alternative]] |[[Image:AriesType-StudentMenu.png|thumb|400px|none|The student's menu. Menu item accessibility is controlled for each student by the teacher. If the exit option is disabled, then attempting to exit tells the student to reboot the computer]] |- |[[Image:AriesType-TeacherMenu.png|thumb|400px|none|The text version of the teacher's menu. Real-time playback of the student's typing was not finished, which is shown as the first item in the menu. In retrospect, such a feature is likely of little or no value to teachers]] |[[Image:AriesType-GraphicalTeacherMenu.png|thumb|400px|none|The graphical version of the teacher's menu with the paging submenu shown. Students can page teachers, similar to how a [http://en.wikipedia.org/wiki/Pager mobile pager] operates, but unlike [http://en.wikipedia.org/wiki/Instant_messaging instant messaging], a teacher must check for pages, and pages to not contain anything other than the name of the student who paged]] |- |[[Image:AriesType-SysopMenu.png|thumb|400px|none|The system operator's menu]] |} ===Email=== AriesType supported a limited form of local-only email. Users could not communicate with people outside of a network's AriesType installation using this system. {| |[[Image:AriesType-EmailPage1.png|thumb|400px|none|AriesType's email setup screen, which asks for the destination user and the subject line. The sender needs to get the destination name exactly correct or else risk having the recipient not seeing the message, and no warning is given to the sender if that happens]] |[[Image:AriesType-EmailPage2.png|thumb|400px|none|The message's contents were typed in one line at a time, and it was not possible to return to a previous line after the [Enter] key was pressed. Messages had a limit of 15 lines]] |- |[[Image:AriesType-EmailReader2.png|thumb|400px|none|The student, who was the recipient of the email in the previous screen shot, receives the message when they check for mail]] |[[Image:AriesType-EmailReader.png|thumb|400px|none|AriesType included an initial email with the installation that highlighted my ego at the time]] |} 8bf61b103881d5b13eb971b128eddc4ac04bed9a File:AriesType-SysopMenu.png 6 1597 1947 2007-10-14T20:28:57Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:AriesType-Splash.png 6 1598 1948 2007-10-14T20:29:07Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:AriesType-SentenceEditor.png 6 1599 1949 2007-10-14T20:29:19Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:AriesType-SentenceEditMenu.png 6 1600 1950 2007-10-14T20:29:28Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 AriesType 0 1596 1957 1956 2007-10-14T21:21:09Z Stevenlawrance 1 /* Email */ wikitext text/x-wiki [[Image:AriesType-Splash.png|thumb|400px|right|AriesType's credits. Brian Dougher, a friend, helped out with the graphics and used his BASIC compiler to generate [http://en.wikipedia.org/wiki/EXE EXE] files from the {{Tech:BASIC}} source code]] AriesType was a [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities. At the time, I had penned some of my software as Aries Software or a variant, though Aries Software was simply an unregistered alter-ego of me. I wrote AriesType in lieu of taking an introductory computer class in high school, and the work primarily occurred during class hours in the same classroom. My past experience at the time with computers and software enabled that position. This project was my first network-enabled multi-user application and was worthwhile for learning about related concerns. AriesType was completed as a working product, though its real-time student typing playback feature was never finished. The typing playback feature would have simulated what the screen looked like for a selected student's typing session, including delays and mistakes, though this likely would not have given much value to teachers. This and the email and paging features are classic examples of [http://en.wikipedia.org/wiki/Gold_plating_%28disambiguation%29 gold plating] that less-experienced software engineers suffer from. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/ariestype.exe Download the AriesType installer]''', which uses [[CatSetup]] for an easy installation instead of AriesType's own installer ==Screen Shots== ===Typing=== Students touch type sentences into AriesType while the system logs the character and timing of each keystroke for later playback. {| |[[Image:AriesType-Typing.png|thumb|400px|none|View of a student typing sentences. AriesType collects metrics on accuracy and timing as the student types]] |[[Image:AriesType-TypingResults.png|thumb|400px|none|The results of a student's typing efforts, which are shown to the student after they finish. The teacher can also retrieve these results as they are stored on the network]] |} ===Sentence Editor=== Teachers can edit and choose the set of sentences that students type. {| |[[Image:AriesType-SentenceEditMenu.png|thumb|400px|none|Sentence editor menu, which also lets a teacher import sentences from an expansion floppy disk or another directory]] |[[Image:AriesType-SentenceEditor.png|thumb|400px|none|The sentence editor, which allows editing of one line at a time]] |} ===Menus=== AriesType displayed a different menu to students, teachers, and system operators. {| |[[Image:AriesType-GraphicalTeacherStartup.png|thumb|300px|none|The unfinished graphical version of AriesType. Only the teacher's menu had a graphical alternative]] |[[Image:AriesType-StudentMenu.png|thumb|400px|none|The student's menu. Menu item accessibility is controlled for each student by the teacher. If the exit option is disabled, then attempting to exit tells the student to reboot the computer]] |- |[[Image:AriesType-TeacherMenu.png|thumb|400px|none|The text version of the teacher's menu. Real-time playback of the student's typing was not finished, which is shown as the first item in the menu. In retrospect, such a feature is likely of little or no value to teachers]] |[[Image:AriesType-GraphicalTeacherMenu.png|thumb|400px|none|The graphical version of the teacher's menu with the paging submenu shown. Students can page teachers, similar to how a [http://en.wikipedia.org/wiki/Pager mobile pager] operates, but unlike [http://en.wikipedia.org/wiki/Instant_messaging instant messaging], a teacher must check for pages, and pages to not contain anything other than the name of the student who paged]] |- |[[Image:AriesType-SysopMenu.png|thumb|400px|none|The system operator's menu]] |} ===Email=== AriesType supported a limited form of local-only email. Users could not communicate with people outside of a network's AriesType installation using this system. {| |[[Image:AriesType-EmailPage1.png|thumb|400px|none|AriesType's email setup screen, which asks for the destination user and the subject line. The sender needs to get the destination name exactly correct or else risk having the recipient not seeing the message, and no warning is given to the sender if that happens]] |[[Image:AriesType-EmailPage2.png|thumb|400px|none|The message's contents were typed in one line at a time, and it was not possible to return to a previous line after the [Enter] key was pressed. Messages had a limit of 15 lines]] |- |[[Image:AriesType-EmailReader2.png|thumb|400px|none|The student, who was the recipient of the email in the previous screen shot, receives the message when they check for mail. Deleting a message was known as "killing" it, though it unfortunately does not work properly in the final version of AriesType]] |[[Image:AriesType-EmailReader.png|thumb|400px|none|AriesType included an initial email with the installation that highlighted my ego at the time]] |} bb74430ec7a2a5172c8c89a98940bb8369e15bc8 1973 1957 2007-10-14T22:53:19Z Stevenlawrance 1 wikitext text/x-wiki [[Image:AriesType-Splash.png|thumb|400px|right|AriesType's credits. Brian Dougher, a friend, helped out with the graphics and used his BASIC compiler to generate [http://en.wikipedia.org/wiki/EXE EXE] files from the {{Tech:BASIC}} source code]] AriesType was a [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities. At the time, I had penned some of my software as Aries Software or a variant, though Aries Software was simply an unregistered alter-ego of me. I wrote AriesType in lieu of taking an introductory computer class in high school, and the work primarily occurred during class hours in the same classroom. My past experience at the time with computers and software enabled that position. This project was my first network-enabled multi-user application and was worthwhile for learning about related concerns. AriesType was completed as a working product, though its real-time student typing playback feature was never finished. The typing playback feature would have simulated what the screen looked like for a selected student's typing session, including delays and mistakes, though this likely would not have given much value to teachers. This and the email and paging features are classic examples of [http://en.wikipedia.org/wiki/Gold_plating_%28disambiguation%29 gold plating] that less-experienced software engineers suffer from. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/ariestype.exe Download the AriesType installer]''', which uses [[CatSetup]] for an easy installation instead of AriesType's own installer *{{CatSetupFiles}} ==Screen Shots== ===Typing=== Students touch type sentences into AriesType while the system logs the character and timing of each keystroke for later playback. {| |[[Image:AriesType-Typing.png|thumb|400px|none|View of a student typing sentences. AriesType collects metrics on accuracy and timing as the student types]] |[[Image:AriesType-TypingResults.png|thumb|400px|none|The results of a student's typing efforts, which are shown to the student after they finish. The teacher can also retrieve these results as they are stored on the network]] |} ===Sentence Editor=== Teachers can edit and choose the set of sentences that students type. {| |[[Image:AriesType-SentenceEditMenu.png|thumb|400px|none|Sentence editor menu, which also lets a teacher import sentences from an expansion floppy disk or another directory]] |[[Image:AriesType-SentenceEditor.png|thumb|400px|none|The sentence editor, which allows editing of one line at a time]] |} ===Menus=== AriesType displayed a different menu to students, teachers, and system operators. {| |[[Image:AriesType-GraphicalTeacherStartup.png|thumb|300px|none|The unfinished graphical version of AriesType. Only the teacher's menu had a graphical alternative]] |[[Image:AriesType-StudentMenu.png|thumb|400px|none|The student's menu. Menu item accessibility is controlled for each student by the teacher. If the exit option is disabled, then attempting to exit tells the student to reboot the computer]] |- |[[Image:AriesType-TeacherMenu.png|thumb|400px|none|The text version of the teacher's menu. Real-time playback of the student's typing was not finished, which is shown as the first item in the menu. In retrospect, such a feature is likely of little or no value to teachers]] |[[Image:AriesType-GraphicalTeacherMenu.png|thumb|400px|none|The graphical version of the teacher's menu with the paging submenu shown. Students can page teachers, similar to how a [http://en.wikipedia.org/wiki/Pager mobile pager] operates, but unlike [http://en.wikipedia.org/wiki/Instant_messaging instant messaging], a teacher must check for pages, and pages to not contain anything other than the name of the student who paged]] |- |[[Image:AriesType-SysopMenu.png|thumb|400px|none|The system operator's menu]] |} ===Email=== AriesType supported a limited form of local-only email. Users could not communicate with people outside of a network's AriesType installation using this system. {| |[[Image:AriesType-EmailPage1.png|thumb|400px|none|AriesType's email setup screen, which asks for the destination user and the subject line. The sender needs to get the destination name exactly correct or else risk having the recipient not seeing the message, and no warning is given to the sender if that happens]] |[[Image:AriesType-EmailPage2.png|thumb|400px|none|The message's contents were typed in one line at a time, and it was not possible to return to a previous line after the [Enter] key was pressed. Messages had a limit of 15 lines]] |- |[[Image:AriesType-EmailReader2.png|thumb|400px|none|The student, who was the recipient of the email in the previous screen shot, receives the message when they check for mail. Deleting a message was known as "killing" it, though it unfortunately does not work properly in the final version of AriesType]] |[[Image:AriesType-EmailReader.png|thumb|400px|none|AriesType included an initial email with the installation that highlighted my ego at the time]] |} 6105c14c6e0b22a707d7619cf9518445dde73207 ActiveMail 0 1542 1958 1815 2007-10-14T21:39:10Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Program-activemailconsole.png|right|thumb|300px|ActiveMail Console]] ActiveMail is a component object model ({{Tech:COM}}) object that provides [http://en.wikipedia.org/wiki/Smtp SMTP] email sending, [http://en.wikipedia.org/wiki/Pop3 POP3] email downloading, and [http://en.wikipedia.org/wiki/Ftp FTP] authentication services. The distribution includes the COM object, its source code, and a {{Tech:VisualBasic}} ActiveMail Console program that lets users easily send mass email messages. ActiveMail Console includes recipient chunking to work around email servers that enforce a maximum number of recipients per email message. This software is ''not'' meant for SPAM, but rather email distribution lists. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/activemail.zip Download the COM object, source code, and ActiveMail Console]''' ==Marketing== While attending [http://www.bryant.edu/ Bryant University], I used ActiveMail as a target for an [https://www.moonlightdesign.org/steve/programs/activemail/index.html academic project in a desktop publishing course]. It makes some claims that ActiveMail does not implement, such as support for an instant message protocol that never materialized, but it's email capabilities hold true. '''[https://www.moonlightdesign.org/steve/programs/activemail/screenshots.html View the screen shots]''' f0f20d5d8270220037213c6d95559820df80652e Steven Lawrance 0 1409 1959 1944 2007-10-14T21:45:16Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| ||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||An online service charger that split the costs of using The Sierra Network (TSN) among my brothers and I. Should work with others such as Prodigy, but with today's unlimited access plans, this program is no longer relevant||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program, making this more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 941c01e5ee9c51feeec7531c5b19daaf06056ce1 1960 1959 2007-10-14T21:47:11Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| ||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate PCL-compliant printers with this nifty utility that works in both Win16 and DOS (the DOS program is linked into the Win16 as its DOS stub)||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program, making this more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] cdc9a12c7cc68310bc01028a3322cfaba5d871d1 1985 1960 2007-10-14T23:55:54Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| ||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program, making this more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] b094c7e84a439a2eaea4d891727d954b91022121 1990 1985 2007-10-15T00:29:46Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| ||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C++}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C++}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program, making this more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 613cf4bee756945ad0c1f08c2a180fbb6e137b08 1997 1990 2007-10-15T01:05:40Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| ||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a while ago to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}|| || |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program, making this more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] faed85e4e1da390544e96b88f8be85eebd816e20 2002 1997 2007-10-15T01:57:59Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| ||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun||{{Tech:C++}}, {{Tech:Win32}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program, making this more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] a04e692a69a707fd229576820a8326fa8da796c3 ScreenWindow 0 1601 1961 2007-10-14T22:02:29Z Stevenlawrance 1 New page: [[Image:Program-screenwindow.png|thumb|right|450px|Screen shot of Jingle Bell's {{Tech:Win16}} port, which uses ScreenWindow]] ScreenWindow is a text console and {{Tech:MIDI}} sound librar... wikitext text/x-wiki [[Image:Program-screenwindow.png|thumb|right|450px|Screen shot of Jingle Bell's {{Tech:Win16}} port, which uses ScreenWindow]] ScreenWindow is a text console and {{Tech:MIDI}} sound library for {{Tech:Win16}} programs that was written to ease the annual [http://en.wikipedia.org/wiki/Christmas_song December holiday song] mid-year project for first-year computer science students at [http://www.gcisd-ghs.org/ Grapevine High School] when the course moved from {{Tech:DOS}} to [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1]. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/screenwindow.exe Download ScreenWindow for Win16]''', which includes the documentation ==Documentation== The functions below were written with contracts that resemble their implementations in {{Tech:DOS}}. {|class="sortable" border="1" !Function !Description |- |getch()||Reads the next character; does not wait for an enter; if enter, it reads it as cr; nothing is printed |- |getchar()||Reads the next character from stdin; waits for an enter; displays entry as it's typed including enter. Enter is read as newline. if newline is entry, it writes cr/nl pair (beginning of next line). First nl entered is not echoed; subsequent ones are. NLs entered are not reflected in memory; only the last cr (the one cvted to nl) is. |- |fgetchar()||Same as getchar() |- |getche()||Same as getch(), but echos character. Reads enter as carriage return. If newline is input, it goes to next line without cr on echo. |- |gets(str)||Echos input including enter. NL behavior is same as getchar(), except enter is not reflected in gets as it is in getchar. |- |perror(str)||Prints str then ": Error %i", where %i is current error number |- |puts(str)||Prints string, then a newline. |- |cgets(str)||str[0] is the max number of chars to get - 1. str[1] is the number of characters read - 1. When NL is entered, it goes to next line without cr first. NLs that are entered are saved in string. Very wild and wacky. |- |cputs(str)||Like puts, but does not translate NL into CR/NL. |- |cscanf, cprintf||Exactly like their scanf/printf counterparts, except that cprintf does not translate newlines into cr/nl. |- |getpass(str)||Asks for a password and returns a pointer to a string that has 8 chars in it, not counting the terminating null. Immediately after the 8th character is entered, the function automatically returns. Pressing enter before the 8th character returns the function. |- |gettext(x, y, x, y, buffer)||Gets text from the screen, ignoring CRs and NLs. |- |puttext(x, y, x, y, buffer)||Puts buffer onto the screen. |- |highvideo, lowvideo, normvideo||Makes fgColor high/low/normal intensity |- |delline||Moves remaining rows up by 1. |- |window(x, y, x, y)||Creates a text window. |- |_setcursortype(type)|| Selects no/underscore/block cursor |- |textattr(attr)||Selects attr text attribute |- |putch||Writes a character, but does not translate newline to CR/NL. |- |insline||Inserts a blank line in the current text window. |} The library included the following {{Tech:MIDI}} functions: *midiInitialize *midiNoteOn(channel, note, pressure : integer) *midiNoteOff(channel, note, velocity : integer) *midiInstrument(channel, instrument : integer) *midiUninitialize *midiHoldPedal(channel : integer; hold : boolean) *midiWait(ms : integer) 5363e91e554c3a7684b826d06e49daa6cb15534d 1963 1961 2007-10-14T22:19:10Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Program-screenwindow.png|thumb|right|450px|Screen shot of Jingle Bell's {{Tech:Win16}} port, which uses ScreenWindow]] ScreenWindow is a text console and {{Tech:MIDI}} sound library for {{Tech:Win16}} programs that was written to ease the annual [http://en.wikipedia.org/wiki/Christmas_song December holiday song] mid-year project for first-year computer science students at [http://www.gcisd-ghs.org/ Grapevine High School] when the course moved from {{Tech:DOS}} to [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1]. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/screenwindow.exe Download ScreenWindow for Win16]''', which includes the documentation *'''[https://www.moonlightdesign.org/steve/programs/ezmidi32.exe Download the Win32 EzMIDI32 version]''', which is described in the [[EzMIDI32|EzMIDI32 page]] ==Documentation== The functions below were written with contracts that resemble their implementations in {{Tech:DOS}}. {|class="sortable" border="1" !Function !Description |- |getch()||Reads the next character; does not wait for an enter; if enter, it reads it as cr; nothing is printed |- |getchar()||Reads the next character from stdin; waits for an enter; displays entry as it's typed including enter. Enter is read as newline. if newline is entry, it writes cr/nl pair (beginning of next line). First nl entered is not echoed; subsequent ones are. NLs entered are not reflected in memory; only the last cr (the one cvted to nl) is. |- |fgetchar()||Same as getchar() |- |getche()||Same as getch(), but echos character. Reads enter as carriage return. If newline is input, it goes to next line without cr on echo. |- |gets(str)||Echos input including enter. NL behavior is same as getchar(), except enter is not reflected in gets as it is in getchar. |- |perror(str)||Prints str then ": Error %i", where %i is current error number |- |puts(str)||Prints string, then a newline. |- |cgets(str)||str[0] is the max number of chars to get - 1. str[1] is the number of characters read - 1. When NL is entered, it goes to next line without cr first. NLs that are entered are saved in string. Very wild and wacky. |- |cputs(str)||Like puts, but does not translate NL into CR/NL. |- |cscanf, cprintf||Exactly like their scanf/printf counterparts, except that cprintf does not translate newlines into cr/nl. |- |getpass(str)||Asks for a password and returns a pointer to a string that has 8 chars in it, not counting the terminating null. Immediately after the 8th character is entered, the function automatically returns. Pressing enter before the 8th character returns the function. |- |gettext(x, y, x, y, buffer)||Gets text from the screen, ignoring CRs and NLs. |- |puttext(x, y, x, y, buffer)||Puts buffer onto the screen. |- |highvideo, lowvideo, normvideo||Makes fgColor high/low/normal intensity |- |delline||Moves remaining rows up by 1. |- |window(x, y, x, y)||Creates a text window. |- |_setcursortype(type)|| Selects no/underscore/block cursor |- |textattr(attr)||Selects attr text attribute |- |putch||Writes a character, but does not translate newline to CR/NL. |- |insline||Inserts a blank line in the current text window. |} The library included the following {{Tech:MIDI}} functions: *midiInitialize *midiNoteOn(channel, note, pressure : integer) *midiNoteOff(channel, note, velocity : integer) *midiInstrument(channel, instrument : integer) *midiUninitialize *midiHoldPedal(channel : integer; hold : boolean) *midiWait(ms : integer) 7e21510ec1771166fc0cf831c8ce9d9ac3ad8b52 1964 1963 2007-10-14T22:21:34Z Stevenlawrance 1 /* Documentation */ wikitext text/x-wiki [[Image:Program-screenwindow.png|thumb|right|450px|Screen shot of Jingle Bell's {{Tech:Win16}} port, which uses ScreenWindow]] ScreenWindow is a text console and {{Tech:MIDI}} sound library for {{Tech:Win16}} programs that was written to ease the annual [http://en.wikipedia.org/wiki/Christmas_song December holiday song] mid-year project for first-year computer science students at [http://www.gcisd-ghs.org/ Grapevine High School] when the course moved from {{Tech:DOS}} to [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1]. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/screenwindow.exe Download ScreenWindow for Win16]''', which includes the documentation *'''[https://www.moonlightdesign.org/steve/programs/ezmidi32.exe Download the Win32 EzMIDI32 version]''', which is described in the [[EzMIDI32|EzMIDI32 page]] ==Documentation== [[EzMIDI32]] has better documentation, which almost entirely applies to ScreenWindow, too. The functions below were written with contracts that resemble their implementations in {{Tech:DOS}}. {|class="sortable" border="1" !Function !Description |- |getch()||Reads the next character; does not wait for an enter; if enter, it reads it as cr; nothing is printed |- |getchar()||Reads the next character from stdin; waits for an enter; displays entry as it's typed including enter. Enter is read as newline. if newline is entry, it writes cr/nl pair (beginning of next line). First nl entered is not echoed; subsequent ones are. NLs entered are not reflected in memory; only the last cr (the one cvted to nl) is. |- |fgetchar()||Same as getchar() |- |getche()||Same as getch(), but echos character. Reads enter as carriage return. If newline is input, it goes to next line without cr on echo. |- |gets(str)||Echos input including enter. NL behavior is same as getchar(), except enter is not reflected in gets as it is in getchar. |- |perror(str)||Prints str then ": Error %i", where %i is current error number |- |puts(str)||Prints string, then a newline. |- |cgets(str)||str[0] is the max number of chars to get - 1. str[1] is the number of characters read - 1. When NL is entered, it goes to next line without cr first. NLs that are entered are saved in string. Very wild and wacky. |- |cputs(str)||Like puts, but does not translate NL into CR/NL. |- |cscanf, cprintf||Exactly like their scanf/printf counterparts, except that cprintf does not translate newlines into cr/nl. |- |getpass(str)||Asks for a password and returns a pointer to a string that has 8 chars in it, not counting the terminating null. Immediately after the 8th character is entered, the function automatically returns. Pressing enter before the 8th character returns the function. |- |gettext(x, y, x, y, buffer)||Gets text from the screen, ignoring CRs and NLs. |- |puttext(x, y, x, y, buffer)||Puts buffer onto the screen. |- |highvideo, lowvideo, normvideo||Makes fgColor high/low/normal intensity |- |delline||Moves remaining rows up by 1. |- |window(x, y, x, y)||Creates a text window. |- |_setcursortype(type)|| Selects no/underscore/block cursor |- |textattr(attr)||Selects attr text attribute |- |putch||Writes a character, but does not translate newline to CR/NL. |- |insline||Inserts a blank line in the current text window. |} The library included the following {{Tech:MIDI}} functions: *midiInitialize *midiNoteOn(channel, note, pressure : integer) *midiNoteOff(channel, note, velocity : integer) *midiInstrument(channel, instrument : integer) *midiUninitialize *midiHoldPedal(channel : integer; hold : boolean) *midiWait(ms : integer) 02e76c37b251d9052da1d94f578dcfef7f391c97 1965 1964 2007-10-14T22:37:19Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Program-screenwindow.png|thumb|right|450px|Screen shot of Jingle Bell's {{Tech:Win16}} port, which uses ScreenWindow]] ScreenWindow is a text console and {{Tech:MIDI}} sound library for {{Tech:Win16}} programs that was written to ease the annual [http://en.wikipedia.org/wiki/Christmas_song December holiday song] mid-year project for first-year computer science students at [http://www.gcisd-ghs.org/ Grapevine High School] when the course moved from {{Tech:DOS}} to [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1]. ScreenWindow's codebase was used in the subsequent {{Tech:Win32}} projects [[ScreenWindowX]] and [[EzMIDI32]]. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/screenwindow.exe Download ScreenWindow for Win16]''', which includes the documentation *'''[https://www.moonlightdesign.org/steve/programs/ezmidi32.exe Download the Win32 EzMIDI32 version]''', which is described in the [[EzMIDI32|EzMIDI32 page]] ==Documentation== [[EzMIDI32]] has better documentation, which almost entirely applies to ScreenWindow, too. The functions below were written with contracts that resemble their implementations in {{Tech:DOS}}. {|class="sortable" border="1" !Function !Description |- |getch()||Reads the next character; does not wait for an enter; if enter, it reads it as cr; nothing is printed |- |getchar()||Reads the next character from stdin; waits for an enter; displays entry as it's typed including enter. Enter is read as newline. if newline is entry, it writes cr/nl pair (beginning of next line). First nl entered is not echoed; subsequent ones are. NLs entered are not reflected in memory; only the last cr (the one cvted to nl) is. |- |fgetchar()||Same as getchar() |- |getche()||Same as getch(), but echos character. Reads enter as carriage return. If newline is input, it goes to next line without cr on echo. |- |gets(str)||Echos input including enter. NL behavior is same as getchar(), except enter is not reflected in gets as it is in getchar. |- |perror(str)||Prints str then ": Error %i", where %i is current error number |- |puts(str)||Prints string, then a newline. |- |cgets(str)||str[0] is the max number of chars to get - 1. str[1] is the number of characters read - 1. When NL is entered, it goes to next line without cr first. NLs that are entered are saved in string. Very wild and wacky. |- |cputs(str)||Like puts, but does not translate NL into CR/NL. |- |cscanf, cprintf||Exactly like their scanf/printf counterparts, except that cprintf does not translate newlines into cr/nl. |- |getpass(str)||Asks for a password and returns a pointer to a string that has 8 chars in it, not counting the terminating null. Immediately after the 8th character is entered, the function automatically returns. Pressing enter before the 8th character returns the function. |- |gettext(x, y, x, y, buffer)||Gets text from the screen, ignoring CRs and NLs. |- |puttext(x, y, x, y, buffer)||Puts buffer onto the screen. |- |highvideo, lowvideo, normvideo||Makes fgColor high/low/normal intensity |- |delline||Moves remaining rows up by 1. |- |window(x, y, x, y)||Creates a text window. |- |_setcursortype(type)|| Selects no/underscore/block cursor |- |textattr(attr)||Selects attr text attribute |- |putch||Writes a character, but does not translate newline to CR/NL. |- |insline||Inserts a blank line in the current text window. |} The library included the following {{Tech:MIDI}} functions: *midiInitialize *midiNoteOn(channel, note, pressure : integer) *midiNoteOff(channel, note, velocity : integer) *midiInstrument(channel, instrument : integer) *midiUninitialize *midiHoldPedal(channel : integer; hold : boolean) *midiWait(ms : integer) 40e4854c3ffa7e2f6e50c6f277ba3e86d92f24a9 1968 1965 2007-10-14T22:47:26Z Stevenlawrance 1 /* Download */ wikitext text/x-wiki [[Image:Program-screenwindow.png|thumb|right|450px|Screen shot of Jingle Bell's {{Tech:Win16}} port, which uses ScreenWindow]] ScreenWindow is a text console and {{Tech:MIDI}} sound library for {{Tech:Win16}} programs that was written to ease the annual [http://en.wikipedia.org/wiki/Christmas_song December holiday song] mid-year project for first-year computer science students at [http://www.gcisd-ghs.org/ Grapevine High School] when the course moved from {{Tech:DOS}} to [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1]. ScreenWindow's codebase was used in the subsequent {{Tech:Win32}} projects [[ScreenWindowX]] and [[EzMIDI32]]. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/screenwindow.exe Download ScreenWindow for Win16]''', which includes the documentation *'''[https://www.moonlightdesign.org/steve/programs/ezmidi32.exe Download the Win32 EzMIDI32 version]''', which is described in the [[EzMIDI32|EzMIDI32 page]] *{{CatSetupFiles}} ==Documentation== [[EzMIDI32]] has better documentation, which almost entirely applies to ScreenWindow, too. The functions below were written with contracts that resemble their implementations in {{Tech:DOS}}. {|class="sortable" border="1" !Function !Description |- |getch()||Reads the next character; does not wait for an enter; if enter, it reads it as cr; nothing is printed |- |getchar()||Reads the next character from stdin; waits for an enter; displays entry as it's typed including enter. Enter is read as newline. if newline is entry, it writes cr/nl pair (beginning of next line). First nl entered is not echoed; subsequent ones are. NLs entered are not reflected in memory; only the last cr (the one cvted to nl) is. |- |fgetchar()||Same as getchar() |- |getche()||Same as getch(), but echos character. Reads enter as carriage return. If newline is input, it goes to next line without cr on echo. |- |gets(str)||Echos input including enter. NL behavior is same as getchar(), except enter is not reflected in gets as it is in getchar. |- |perror(str)||Prints str then ": Error %i", where %i is current error number |- |puts(str)||Prints string, then a newline. |- |cgets(str)||str[0] is the max number of chars to get - 1. str[1] is the number of characters read - 1. When NL is entered, it goes to next line without cr first. NLs that are entered are saved in string. Very wild and wacky. |- |cputs(str)||Like puts, but does not translate NL into CR/NL. |- |cscanf, cprintf||Exactly like their scanf/printf counterparts, except that cprintf does not translate newlines into cr/nl. |- |getpass(str)||Asks for a password and returns a pointer to a string that has 8 chars in it, not counting the terminating null. Immediately after the 8th character is entered, the function automatically returns. Pressing enter before the 8th character returns the function. |- |gettext(x, y, x, y, buffer)||Gets text from the screen, ignoring CRs and NLs. |- |puttext(x, y, x, y, buffer)||Puts buffer onto the screen. |- |highvideo, lowvideo, normvideo||Makes fgColor high/low/normal intensity |- |delline||Moves remaining rows up by 1. |- |window(x, y, x, y)||Creates a text window. |- |_setcursortype(type)|| Selects no/underscore/block cursor |- |textattr(attr)||Selects attr text attribute |- |putch||Writes a character, but does not translate newline to CR/NL. |- |insline||Inserts a blank line in the current text window. |} The library included the following {{Tech:MIDI}} functions: *midiInitialize *midiNoteOn(channel, note, pressure : integer) *midiNoteOff(channel, note, velocity : integer) *midiInstrument(channel, instrument : integer) *midiUninitialize *midiHoldPedal(channel : integer; hold : boolean) *midiWait(ms : integer) cfc3a03398aed05c16eb29c415306f6f46e8d860 MediaWiki:Common.js 8 1417 1962 1640 2007-10-14T22:15:59Z Stevenlawrance 1 javascript text/javascript /* Any JavaScript here will be loaded for all users on every page load. */ // Highlight every other line in the software tables var orig_onload = window.onload; window.onload = function(e) { if (orig_onload != null) { orig_onload(e); } var tables = document.getElementsByTagName("table"); var rows; for (var t = 0; t < tables.length; t++) { if (tables[t].className.indexOf("software") >= 0) { grayRows(tables[t]); // Give the third-to-last cell a width of 15em (CSS lets us do this, but, sadly, browsers don't implement nth-child) // and the second-to-last cell a width of 6em rows = tables[t].rows; for (var r = 0; r < rows.length; r++) { if (rows[r].lastChild && rows[r].lastChild.previousSibling) { var secondToLast = rows[r].lastChild.previousSibling; secondToLast.style.width = "6em"; if (secondToLast.tagName.toLowerCase() == "td") { secondToLast.style.textAlign = "right"; } if (secondToLast.previousSibling) { secondToLast.previousSibling.style.width = "15em"; } } } } } } function grayRows(table) { var rows = table.rows; for (var r = 0; r < rows.length; r++) { if (r % 2 == 1) { rows[r].className = "grayrow"; } else { rows[r].className = ""; } } } var orig_ts_resortTable = ts_resortTable; ts_resortTable = function(evt) { orig_ts_resortTable(evt); // Find the table var table = evt; while (table && table.tagName.toLowerCase() != "table") { table = table.parentNode; } if (table && (table.className.indexOf("software") >= 0)) { grayRows(table); } } 1b1fccb88134c543525dd365c7ca426e9dd5ba54 EzMIDI32 0 1602 1966 2007-10-14T22:41:47Z Stevenlawrance 1 New page: EzMIDI32, also known as EasyMIDI32, is a {{Tech:MIDI}} library and thin wrapper around [http://en.wikipedia.org/wiki/Win32_console Microsoft's console API]. This library was primarily writ... wikitext text/x-wiki EzMIDI32, also known as EasyMIDI32, is a {{Tech:MIDI}} library and thin wrapper around [http://en.wikipedia.org/wiki/Win32_console Microsoft's console API]. This library was primarily written for the annual [http://en.wikipedia.org/wiki/Christmas_song December holiday song] mid-year project for first-year computer science students at [http://www.gcisd-ghs.org/ Grapevine High School]. This was a follow-up project to [[ScreenWindow]] after the course moved from {{Tech:Pascal}} to {{Tech:C++}}. ec024496538179bdb54f0fc18e6523cb67661e7f 1979 1966 2007-10-14T23:17:43Z Stevenlawrance 1 wikitext text/x-wiki EzMIDI32, also known as EasyMIDI32, is a {{Tech:MIDI}} library and thin wrapper around [http://en.wikipedia.org/wiki/Win32_console Microsoft's console API]. This library was primarily written for the annual [http://en.wikipedia.org/wiki/Christmas_song December holiday song] mid-year project for first-year computer science students at [http://www.gcisd-ghs.org/ Grapevine High School]. This was a follow-up project to [[ScreenWindow]] after the course moved from {{Tech:Pascal}} to {{Tech:C++}}. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/ezmidi32.exe Download EzMIDI32]''' *{{CatSetupFiles}} ==Documentation== The following is the readme.txt file that gets installed with the full distribution: <pre> EasyMIDI32 was designed and programmed by Steven Lawrance and is (c) 1996, 1998 Steven Lawrance. This version is 2.02.98.1 (Release 2) The 16-bit version can be found on the Lawrance Consulting web site. Details are at the bottom of this document. If you have release 1 of the ScreenWindow API, you must download release 2 to use midiGetHMidiOut and instrument number 128. ========================================= TABLE OF CONTENTS ========================================= 1. MIDI Functions 2. Console Functions A. General MIDI Instruments ========================================= 1. MIDI Functions ========================================= The MIDI functions implemented by EzMIDI32.DLL allow anyone to easily access the basic MIDI capabilities of supportive computers. The Win32 API currently requires programmers to have technical background on the MIDI specification, but for those who simply want to turn notes on and off, EzMIDI32 allows easy access without requiring deep technical knowledge. These functions are safe for use in both single-threaded and multithreaded applications. If used in an application with an active console, program breaks automatically clean up the MIDI interface before closing the program. Functions: BOOL midiInitialize(); BOOL midiNoteOn(int channel, int note, int pressure); BOOL midiNoteOff(int channel, int note, int velocity); BOOL midiInstrument(int channel, int instrument); BOOL midiHoldPedal(int channel, BOOL hold); BOOL midiWait(UINT ms); HMIDIOUT midiGetHMidiOut(); BOOL midiUninitialize(); ----------------------------------------- midiInitialize ----------------------------------------- Initializes the EasyMIDI interface and opens the MIDI output port internally. BOOL midiInitialize(); Parameters: none Return Values: Returns a non-zero value if the function was successful. If the function failed, the function returns zero and sets the last error to one of the following (get with GetLastError()): ERROR_MIDIALREADYOPEN EasyMIDI already initialized ERROR_MIDIOPEN The MIDI output port is in use by another process ERROR_NOMIDI System does not have any MIDI output devices installed Remarks: Call this function before you use any other EasyMIDI functions. Failure to do so will cause the other functions to return zero until midiInitialize succeeds. If your application has an open console, program break messages are handled by EasyMidi to allow proper cleanup of the MIDI interface. This special handling can be disabled by not having an open console before calling midiInitialize. Calling midiUninitialize will remove EasyMidi's special break handling function from the console. See Also: midiOutOpen ----------------------------------------- midiNoteOn ----------------------------------------- Sends a MIDI message to turn on a note on a given channel with a given pressure. BOOL midiNoteOn(int channel, int note, int pressure); Parameters: int channel The MIDI channel to send the message on. Valid values: 0..127 int note The note number to play. See the remarks for more information on notes int pressure The pressure to apply to the note. Higher numbers result in louder intensities. Valid values: 0..127 Return Values: Returns a non-zero value if the function was successful. If the function failed, the function returns zero and sets the last error to one of the following (get with GetLastError()): ERROR_MIDINOTOPEN EasyMIDI has not been initialized ERROR_BADMIDICHANNEL The channel parameter is invalid ERROR_BADMIDINOTE The note parameter is invalid ERROR_BADMIDIPRESSURE The pressure parameter is invalid ERROR_MIDISEND Writing to the MIDI output port failed Remarks: When a note is turned on, it will remain on until it is turned off with either midiNoteOff or midiOutReset. Channels allow songs to play notes of different instruments simultaneously. Valid note values range from zero to 127. Middle C has a value of 60. The length of an octave is 12, meaning that the value of C above Middle C is 72. A note's sharp has the same value as the next note's flat. See Also: midiNoteOff, midiWait, midiOutReset, midiOutShortMsg ----------------------------------------- midiNoteOff ----------------------------------------- Sends a MIDI message to turn off a note on a given channel at a given velocity. BOOL midiNoteOff(int channel, int note, int velocity); Parameters: int channel The MIDI channel to send the message on. Valid values: 0..127 int note The note number to stop. See the remarks for more information on notes int velocity How fast a note should stop. Lower values cause the note to fade longer, and higher values make the stop more abruptly. Valid values: 0..127 Return Values: Returns a non-zero value if the function was successful. If the function failed, the function returns zero and sets the last error to one of the following (get with GetLastError()): ERROR_MIDINOTOPEN EasyMIDI has not been initialized ERROR_BADMIDICHANNEL The channel parameter is invalid ERROR_BADMIDINOTE The note parameter is invalid ERROR_BADMIDIVELOCITY The velocity parameter is invalid ERROR_MIDISEND Writing to the MIDI output port failed Remarks: Notes that are turned off with this function must have previously been turned on with midiNoteOn. To create a delay between midiNoteOn and midiNoteOff calls, either use midiWait or some other delay code. If more than one note was turned on in the same channel, you still need to turn off each note if you want to make the channel silent. That is, you must have a midiNoteOff call for every midiNoteOn call if you want to have a song that does not have any notes still on when it is done. Even if the multiple notes in the same channel had the same note value (such as an orchestra effect), you still need to call midiNoteOff for every call to midiNoteOn. If midiHoldPedal is set on the same channel passed to this function, the note will not be turned off until midiHoldPedal is called with FALSE. But if you unset midiHoldPedal without calling midiNoteOff, the note will continue to play until midiNoteOff is called on that note. Some instruments have longer play durations than others, and in some cases the note may already seem to be "off" when internally it is on. Or, if a note is turned off before the entire note has been played, then the user will not hear the part of the note that normally comes after the point where the note was turned off. Many notes repeat during longer play durations and will play for the entire time the note is on regardless of length, such as a violin. A piano, however, does not repeat in most cases. See Also: midiNoteOn, midiWait, midiOutReset, midiOutShortMsg ----------------------------------------- midiInstrument ----------------------------------------- Sets the instrument that new notes will use in the given channel. BOOL midiInstrument(int channel, int instrument); Parameters: int channel The MIDI channel to send the message on. Valid values: 0..127 int instrument The instrument to use. Read through Appendix A for more information on instruments. Valid values: 0..128 Return Values: Returns a non-zero value if the function was successful. If the function failed, the function returns zero and sets the last error to one of the following (get with GetLastError()): ERROR_MIDINOTOPEN EasyMIDI has not been initialized ERROR_BADMIDICHANNEL The channel parameter is invalid ERROR_BADMIDIINSTRUMENT The instrument parameter is invalid ERROR_MIDISEND Writing to the MIDI output port failed Remarks: This function allows you to set the instrument that the next note on the given channel, if any, will use. Use midiNoteOn to turn on a note after calling midiInstrument to use the new instrument. See Appendix A for more information on using instruments and for the valid values. See Also: midiNoteOn, midiNoteOff, midiOutShortMsg ----------------------------------------- midiHoldPedal ----------------------------------------- Postpones midiNoteOff messages on the given channel until midiHoldPedal is called again. BOOL midiHoldPedal(int channel, BOOL hold); Parameters: int channel The MIDI channel to send the message on. Valid values: 0..127 int hold If TRUE, midiNoteOff messages are postponed until midiHoldPedal is called with FALSE in the hold parameter. If FALSE, any holds on the given MIDI channel are released and all waiting MIDI note off messages are processed at the same time Return Values: Returns a non-zero value if the function was successful. If the function failed, the function returns zero and sets the last error to one of the following (get with GetLastError()): ERROR_MIDINOTOPEN EasyMIDI has not been initialized ERROR_BADMIDICHANNEL The channel parameter is invalid ERROR_MIDISEND Writing to the MIDI output port failed Remarks: This function delays MIDI note off messages in the MIDI processor until this function is called again to un-hold the messages. The delay is implemented by the MIDI hardware and might not be supported by some MIDI devices. This function's capabilities can be duplicated by moving all the midiNoteOff calls into one place where they are all called at once. See Also: midiNoteOff, midiOutShortMsg ----------------------------------------- midiWait ----------------------------------------- Causes the current thread to do nothing for the given number of milliseconds. The Win16 version continually yields the processor to other tasks until the given number of milliseconds has elapsed. BOOL midiWait(UINT ms); Parameters: UINT ms An unsigned integer for the number of milliseconds the delay should last. Return Values: Returns a non-zero value if the function was successful. The Win16 version always returns non-zero. If the function failed, the function returns zero and sets the last error to one of the following (get with GetLastError()): ERROR_MIDINOTOPEN EasyMIDI has not been initialized Remarks: In the Win32 version, a zero value for ms will cause EasyMIDI to forfeit the remainder of its timeslice to other programs of the same priority. In that case, the function will return almost immediately after a very brief delay, if any. The Win16 version always returns immediately when ms is zero. See Also: Sleep (Win32 version); Yield, timeGetTime (Win16 version) ----------------------------------------- midiGetHMidiOut ----------------------------------------- Returns the HMIDIOUT handle that was opened when midiInitialize was successfully called. If midiInitialize failed or was not called, then the returned value is not a valid HMIDIOUT handle. HMIDIOUT midiGetHMidiOut(); Parameters: none Return Values: The internal hMidiOut variable is always returned, regardless of its validity. Remarks: Use this function if you want to call midiOutxxxx API functions manually. When using the value returned from this function, avoid calling midiOutOpen and midiOutClose. To close the handle, use EasyMIDI's midiUninitialize. Known functions that can be used with the value returned by this function include midiConnect, midiDisconnect, midiOutCacheDrumPatches, midiOutCachePatches, midiOutGetDevCaps, midiOutGetID, midiOutGetNumDevs, midiOutGetVolume, midiOutLongMsg, midiOutMessage, midiOutPrepareHeader, midiOutReset, midiOutSetVolume, midiOutShortMsg, and midiOutUnprepareHeader. See Also: midiInitialize, midiUninitialize ----------------------------------------- midiUninitialize ----------------------------------------- Silences any playing notes and closes the MIDI output device. BOOL midiUninitialize(); Parameters: none Return Values: Returns a non-zero value if the function was successful. If the function failed, the function returns zero and sets the last error to one of the following (get with GetLastError()): ERROR_MIDINOTOPEN EasyMIDI has not been initialized Remarks: This function calls midiOutReset before closing the MIDI output port. Internal variables are freed at this time too, and the special handling for program break codes on the console, if installed, is removed. Call this function when you are finished with EasyMIDI at the end of your program. See Also: midiInitialize, midiOutReset, midiOutClose ========================================= 2. Console Functions ========================================= The console functions, only available in the Win32 version of EasyMIDI, allow programs to use a standard Win32 console to produce colorful output without requiring standard libraries to implement textcolor and textbackground. Besides, their implementations do not work in the libraries that were tested so far. These functions are safe for use in both single-threaded and multithreaded applications. If used in an application with an active console, program breaks automatically clean up the MIDI interface before closing the program. Functions: BOOL SetFgColor(int newcolor); BOOL SetBgColor(int newcolor); BOOL ClearScreen(void); BOOL GotoXY(short x, short y); DWORD WhereX(void); DWORD WhereY(void); BOOL Write(LPCTSTR lpszString); Compatibility Functions: #define gotoxy(x, y) GotoXY(x, y) #define clrscr() ClearScreen() #define textcolor(mode) SetFgColor(mode) #define textbackground(mode) SetBgColor(mode) #define wherex() WhereX() #define wherey() WhereY() ----------------------------------------- SetFgColor ----------------------------------------- Sets the current foreground color on the console window that was available when midiInitialize was called, if any. BOOL SetFgColor(int newcolor); #define textcolor(mode) SetFgColor(mode) Parameters: int newcolor A value for the new color. Valid values range from 0 to 15, and can be one of the following: BLACK, BLUE, GREEN, CYAN, RED, MAGENTA, BROWN, LIGHTGRAY, DARKGRAY, LIGHTBLUE, LIGHTGREEN, LIGHTCYAN, LIGHTRED, LIGHTMAGENTA, YELLOW, and WHITE Return Values: Returns a non-zero value if the function was successful. If the function failed, the function returns zero and sets the last error to one of the following (get with GetLastError()): ERROR_MIDINOTOPEN EasyMIDI has not been initialized ERROR_NOCONSOLE No console was available when midiInitialize was called Other values Refer to the documentation for the SetConsoleTextAttribute Win32 API function Remarks: This function is only implemented in the Win16 version of EasyMIDI. Programmers using the 16-bit version should use the ScreenWindow library and call textcolor(newcolor). In the Win32 version, BROWN's displayed color might look more like a dark yellow than anything while in window mode. Switching to full screen mode typically solves this problem. If using Win16, ScreenWindow properly initializes a color palette with a realistic brown. See Also: textcolor, midiInitialize ----------------------------------------- SetBgColor ----------------------------------------- Sets the current background color on the console window that was available when midiInitialize was called, if any. BOOL SetBgColor(int newcolor); #define textbackground(mode) SetBgColor(mode) Parameters: int newcolor A value for the new color. Valid values range from 0 to 15, and can be one of the following: BLACK, BLUE, GREEN, CYAN, RED, MAGENTA, BROWN, LIGHTGRAY, DARKGRAY, LIGHTBLUE, LIGHTGREEN, LIGHTCYAN, LIGHTRED, LIGHTMAGENTA, YELLOW, and WHITE Return Values: Returns a non-zero value if the function was successful. If the function failed, the function returns zero and sets the last error to one of the following (get with GetLastError()): ERROR_MIDINOTOPEN EasyMIDI has not been initialized ERROR_NOCONSOLE No console was available when midiInitialize was called Other values Refer to the documentation for the SetConsoleTextAttribute Win32 API function Remarks: This function is only implemented in the Win16 version of EasyMIDI. Programmers using the 16-bit version should use the ScreenWindow library and call textbackground(newcolor). Some video cards might not support background colors after LIGHTGRAY while in full screen text mode. Switching to window mode should correct this problem. In the Win32 version, BROWN's displayed color might look more like a dark yellow than anything while in window mode. Switching to full screen mode typically solves this problem. If using Win16, ScreenWindow properly initializes a color palette with a realistic brown. See Also: textbackground, midiInitialize ----------------------------------------- ClearScreen ----------------------------------------- Clears the screen and positions the cursor at the top-left corner of the console. BOOL ClearScreen(void); #define clrscr() ClearScreen() Parameters: none Return Values: Returns a non-zero value if the function was successful. If the function failed, the function returns zero and sets the last error to one of the following (get with GetLastError()): ERROR_MIDINOTOPEN EasyMIDI has not been initialized ERROR_NOCONSOLE No console was available when midiInitialize was called Other values Refer to the documentation for the SetConsoleOutputAttribute, FillConsoleOutputCharacter, and SetConsoleCursorPosition Win32 API functions Remarks: The screen clears with the current background color. This function is only implemented in the Win16 version of EasyMIDI. Programmers using the 16-bit version should use the ScreenWindow library and call clrscr(). Some video cards might not support background colors after LIGHTGRAY while in full screen text mode. Switching to window mode should correct this problem. In the Win32 version, BROWN's displayed color might look more like a dark yellow than anything while in window mode. Switching to full screen mode typically solves this problem. If using Win16, ScreenWindow properly initializes a color palette with a realistic brown. See Also: clrscr, midiInitialize ----------------------------------------- GotoXY ----------------------------------------- Positions the cursor at the given (x,y) coordinates. BOOL GotoXY(short x, short y); #define gotoxy(x, y) GotoXY(x, y) Parameters: short x The column to move to short y The row to move to Return Values: Returns a non-zero value if the function was successful. If the function failed, the function returns zero and sets the last error to one of the following (get with GetLastError()): ERROR_MIDINOTOPEN EasyMIDI has not been initialized ERROR_NOCONSOLE No console was available when midiInitialize was called Other values Refer to the documentation for the SetConsoleCursorPosition Win32 API function Remarks: This function is only implemented in the Win32 version of EasyMIDI. Programmers using the 16-bit version should use the ScreenWindow library and call gotoxy(x, y). See Also: gotoxy, midiInitialize ----------------------------------------- WhereX ----------------------------------------- Returns the current column of the cursor in the console window. DWORD WhereX(void); #define wherex() WhereX() Parameters: none Return Values: Returns a non-zero value equaling the current column in the console window if the function was successful. If the function failed, the function returns zero and sets the last error to one of the following (get with GetLastError()): ERROR_MIDINOTOPEN EasyMIDI has not been initialized ERROR_NOCONSOLE No console was available when midiInitialize was called Other values Refer to the documentation for the GetConsoleScreenBufferInfo Win32 API function Remarks: This function is only implemented in the second release of the Win32 version of EasyMIDI. Programmers using the 16-bit version should use the ScreenWindow library and call wherex(x, y). See Also: wherey, midiInitialize ----------------------------------------- WhereY ----------------------------------------- Returns the current row of the cursor in the console window. DWORD WhereY(void); #define wherey() WhereY() Parameters: none Return Values: Returns a non-zero value equaling the current row in the console window if the function was successful. If the function failed, the function returns zero and sets the last error to one of the following (get with GetLastError()): ERROR_MIDINOTOPEN EasyMIDI has not been initialized ERROR_NOCONSOLE No console was available when midiInitialize was called Other values Refer to the documentation for the GetConsoleScreenBufferInfo Win32 API function Remarks: This function is only implemented in the second release of the Win32 version of EasyMIDI. Programmers using the 16-bit version should use the ScreenWindow library and call wherey(x, y). See Also: wherex, midiInitialize ----------------------------------------- Write ----------------------------------------- Prints text onto the console at the current cursor position. BOOL Write(LPCTSTR lpszString); Parameters: LPCTSTR lpszString Long pointer to a constant Unicode(tm) or ASCII string to print on the console Return Values: Returns a non-zero value if the function was successful. If the function failed, the function returns zero and sets the last error to one of the following (get with GetLastError()): ERROR_MIDINOTOPEN EasyMIDI has not been initialized ERROR_NOCONSOLE No console was available when midiInitialize was called Remarks: This function allows Unicode strings to print when using a Unicode-enabled version of Win32. Windows NT and Windows CE both support Unicode internally on all Win32 API functions; Win95 and Win98 do not. On Win95 consoles, writing a newline may cause the remainder of the line, if any, to instantly take on the current foreground and background colors. If this effect is not desired, then use GotoXY to manually move to the next line. This problem is not an issue with Windows NT unless if you are writing to the last row of the console. Standard library implementations from both Microsoft and Borland also call WriteConsole and/or WriteFile, and this effect is duplicated. It is just as safe to call Write as it is to call standard library output and input functions. If cout, printf, puts, etc. are used, the effects are the same (e.g., the text is written to the screen using the current colors and position). See Also: GotoXY, cout, printf, puts, midiInitialize ========================================= A. General MIDI Instruments ========================================= In MIDI, instruments are referenced by a 8-bit unsigned integer, ranging from 0 to 128 (129-255 are invalid MIDI instruments). The following instruments have been grouped for easy reference by category (Pianos, Chromatic Percussion, Organs, Guitars, Bass, Strings, Ensembles, Brass, Reeds, Pipes, Synth Lead, Synth Pad, Background Tracks, Miscellaneous Strings, Miscellaneous Percussion, Sound Effects, and Standard Percussion). ----------------------------------------- Pianos ----------------------------------------- 0 Acoustic grand piano 1 Bright acoustic piano 2 Electric grand piano 3 Honky-tonk piano 4 Rhodes piano 5 Chorused piano 6 Harpsichord 7 Clavinet ----------------------------------------- Chromatic Percussion ----------------------------------------- 8 Celesta 9 Glockenspiel 10 Music box 11 Vibraphone 12 Marimba 13 Xylophone 14 Tubular bells 15 Dulcimer ----------------------------------------- Organs ----------------------------------------- 16 Hammond organ 17 Percussive organ 18 Rock organ 19 Church organ 20 Reed organ 21 Accordion 22 Harmonica 23 Tango accordion ----------------------------------------- Guitars ----------------------------------------- 24 Acoustic guitar (nylon) 25 Acoustic guitar (steel) 26 Electric guitar (jazz) 27 Electric guitar (clean) 28 Electric guitar (muted) 29 Overdriven guitar 30 Distortion guitar 31 Guitar harmonics ----------------------------------------- Bass ----------------------------------------- 32 Acoustic bass 33 Electric bass (finger) 34 Electric bass (pick) 35 Fretless bass 36 Slap bass 1 37 Slap bass 2 38 Synth bass 1 39 Synth bass 2 ----------------------------------------- Strings ----------------------------------------- 40 Violin 41 Viola 42 Cello 43 Contrabass 44 Tremolo strings 45 Pizzicato strings 46 Orchestral harp 47 Timpani ----------------------------------------- Ensembles ----------------------------------------- 48 String ensemble 1 49 String ensemble 2 50 Synth. strings 1 51 Synth. strings 2 52 Choir Aahs 53 Voice Oohs 54 Synth voice 55 Orchestra hit ----------------------------------------- Brass ----------------------------------------- 56 Trumpet 57 Trombone 58 Tuba 59 Muted trumpet 60 French horn 61 Brass section 62 Synth. brass 1 63 Synth. brass 2 ----------------------------------------- Reeds ----------------------------------------- 64 Soprano sax 65 Alto sax 66 Tenor sax 67 Baritone sax 68 Oboe 69 English horn 70 Bassoon 71 Clarinet ----------------------------------------- Pipes ----------------------------------------- 72 Piccolo 73 Flute 74 Recorder 75 Pan flute 76 Bottle blow 77 Shakuhachi 78 Whistle 79 Ocarina ----------------------------------------- Synth Lead ----------------------------------------- 80 Lead 1 (square) 81 Lead 2 (sawtooth) 82 Lead 3 (calliope lead) 83 Lead 4 (chiff lead) 84 Lead 5 (charang) 85 Lead 6 (voice) 86 Lead 7 (fifths) 87 Lead 8 (brass + lead) ----------------------------------------- Synth Pad ----------------------------------------- 88 Pad 1 (new age) 89 Pad 2 (warm) 90 Pad 3 (polysynth) 91 Pad 4 (choir) 92 Pad 5 (bowed) 93 Pad 6 (metallic) 94 Pad 7 (halo) 95 Pad 8 (sweep) ----------------------------------------- Background Tracks ----------------------------------------- 96 Ice Rain 97 Soundtrack 98 Crystal 99 Atmosphere 100 Brightness 101 Goblin 102 Echo Drops 103 Star Theme ----------------------------------------- Miscellaneous Strings ----------------------------------------- 104 Sitar 105 Banjo 106 Shamisen 107 Koto 108 Kalimba 109 Bagpipe 110 Fiddle 111 Shenai ----------------------------------------- Miscellaneous Percussion ----------------------------------------- 112 Tinker Bell 113 Agogo 114 Steel Drum 115 Wood Block 116 Taiko Drum 117 Melodic Tom 118 Synth Drum 119 Reverse Cymbal ----------------------------------------- Sound Effects ----------------------------------------- 120 Guitar fret noise 121 Breath noise 122 Seashore 123 Bird tweet 124 Telephone ring 125 Helicopter 126 Applause 127 Gunshot ----------------------------------------- Standard Percussion (Instrument 128) ----------------------------------------- The values listed are the note numbers to use for the given sound on instrument 128: 35 Acoustic Bass Drum 36 Bass Drum 1 37 Side Stick 38 Acoustic Snare 39 Hand Clap 40 Electric Snare 41 Low Floor Tom 42 Closed High-Hat 43 High Floor Ton 44 Pedal High-Hat 45 Low Tom 46 Open High-Hat 47 Low-Mid Tom 48 High-Mid Tom 49 Crash Cymbal 1 50 High Tom 51 Ride Cymbal 1 52 Chinese Cymbal 53 Ride Bell 54 Tambourine 55 Splash Cymbal 56 Cowbell 57 Crash Cymbal 2 58 Vibraslap 59 Ride Cymbal 2 60 High Bongo 61 Low Bongo 62 Mute High Conga 63 Open High Conga 64 Low Conga 65 High Timbale 66 Low Timbale 67 High Agogo 68 Low Agogo 69 Cabasa 70 Maracas 71 Short Whistle 72 Long Whistle 73 Short Guiro 74 Long Guiro 75 Claves 76 High Wood Block 77 Low Wood Block 78 Mute Cuica 79 Open Cuica 80 Mute Triangle 81 Open Triangle ========================================= Written by Steven Lawrance on 8-20-1998 Revised on 12-2-1998 by Steven Lawrance for Release 2 Portions copied from the Microsoft Platform SDK reference on MIDI instruments, and from Creative Labs's AWE Control Panel v2.07.0. This document is for educational use only. All trademarks belong to their respective owners. </pre> 72a487641f0fcd8849e4527deb37927ad250da71 Template:CatSetupFiles 10 1603 1967 2007-10-14T22:47:11Z Stevenlawrance 1 New page: [https://www.moonlightdesign.org/steve/programs/catsetup-windows-system-files.zip Download CatSetup's required DLL files], if needed. Older versions of CatSetup required bwcc.dll, and the ... wikitext text/x-wiki [https://www.moonlightdesign.org/steve/programs/catsetup-windows-system-files.zip Download CatSetup's required DLL files], if needed. Older versions of CatSetup required bwcc.dll, and the latest version requires ctl3dv2.dll. These go into the windows\system folder, not windows\system32. Windows computers typically already have ctl3dv2.dll installed, which is a Microsoft library bce2e0041642c337ef567626cc0501135e2d4fa8 1969 1967 2007-10-14T22:50:19Z Stevenlawrance 1 wikitext text/x-wiki [https://www.moonlightdesign.org/steve/programs/catsetup-windows-system-files.zip Download CatSetup's required DLL files], if needed. Older versions of CatSetup required bwcc.dll, and the latest version requires ctl3dv2.dll. These go into the windows\system folder, not windows\system32. [http://en.wikipedia.org/wiki/Microsoft_Windows Windows] computers typically already have ctl3dv2.dll installed, which is a Microsoft library, and [http://en.wikipedia.org/wiki/Wine_%28software%29 Wine] has a built-in implementation 4fb8ae61fd96042f1e460acef90110fe5d52e299 SLOS-Win 0 1541 1970 1868 2007-10-14T22:52:26Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Slos-win.png|thumb|450px|Screen shot of the window-based directory listing in SLOS-Win. [http://en.wikipedia.org/wiki/Object_Windows_Library Borland's Window Custom Control library] was used, which provides its look-and-feel]] [[SLOS-DOS|Steven Lawrance's Operating System (SLOS)]], also known briefly as Steven Lawrance's Operating Program (SL-OP), was a small interpreted toy operating environment written in {{Tech:BASIC}} for {{Tech:DOS}}. The primary motivation for writing this was to have an environment that supported [http://en.wikipedia.org/wiki/Long_filename long file names]. This was written in 1993 -- two years before [http://en.wikipedia.org/wiki/Microsoft Microsoft] released native long file name support in a consumer operating system with [http://en.wikipedia.org/wiki/Windows_95 Windows 95]. A small subset of the SLOS commands were implemented in this Windows version. Unfortunately, this Windows version cannot run most of the SLOS programs that were written. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/slosdist1.exe Download SLOS-DOS and SLOS-Win]''' *'''[https://www.moonlightdesign.org/steve/programs/sloswin.zip Download SLOS-Win's Source Code]''' *{{CatSetupFiles}} 2314d6de554b8dd671f856eae6aad3ebcc6e99a0 SLOS-DOS 0 1537 1971 1805 2007-10-14T22:52:41Z Stevenlawrance 1 wikitext text/x-wiki Steven Lawrance's Operating System (SLOS), also known briefly as Steven Lawrance's Operating Program (SL-OP), was a small interpreted toy operating environment written in {{Tech:BASIC}} for {{Tech:DOS}}. The primary motivation for writing this was to have an environment that supported [http://en.wikipedia.org/wiki/Long_filename long file names]. This was written in 1993 -- two years before [http://en.wikipedia.org/wiki/Microsoft Microsoft] released native long file name support in a consumer operating system with [http://en.wikipedia.org/wiki/Windows_95 Windows 95]. SLOS was primarily distributed on the [http://www.flightsim.com/arcanum/fs.htm Contrails] [http://en.wikipedia.org/wiki/Bulletin_board_system BBS] in [http://en.wikipedia.org/wiki/Euless%2C_Texas Euless, Texas]. It is now distributed from this web site. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/slosdist1.exe Download SLOS-DOS and SLOS-Win]''' *'''[https://www.moonlightdesign.org/steve/programs/sloswin.zip Download SLOS-Win's Source Code]''', a [[SLOS-Win|Windows version of SLOS]] *{{CatSetupFiles}} ==Commands== [[Image:Slos-installed.png|right|thumb|450px|Screen shot of what SLOS looks like on its first use, which runs a small installer to finalize the setup]] [[Image:Slos-dir.png|right|thumb|450px|Screen shot of the DIR directory listing command]] SLOS's command prompt permits the user to run any of the following commands from its [http://en.wikipedia.org/wiki/Smiley smile emoticon] :-) prompt: {|border="1" |- |SLTOOLS||Steven Lawrance's Tools |- |HELP||Help System |- |DIR||File Listing |- |CLS||Clears Screen |- |RUN program||Runs a Program |- |LOAD program||Loads a Program |- |EDIT||Creates a New DOS File |- |EDIT filename||Edits an SL-File |- |NEW filename||Creates a New SL File |- |FAT||Updates FAT |- |EXIT||Exits SL-OS |- |QUIT||Exits SL-OS |- |DEL filename||Deletes an SL-File |- |UNDEL||Undeletes an SL-File with a DOS name |- |UNDEL filename||Undeletes an SL-File with a DOS name |- |PURGE||Purges a Deleted SL-File |} ==Scripting Language== SLOS executes script files having a "exc" file extension in an interpreted manner. Because this interpreter is running within the BASIC interpreter, execution speed is noticeably slow. The scripting language is difficult to read due to its overuse of abbreviations. [[CatSetup]], by contrast, has a scripting language that is easier to write and read. ===Syntax=== The following commands are possible in a SLOS program. Each command appears by itself on its own line with no surrounding whitespace. {|border="1" |- |P!text |Prints text on the screen. {|border="1" |Example: |- |P!Hello!||How are you today? |} |- |I$nquestion |Asks a question. n=number of answers, question=text to display {|border="1" |Example: |- |I$2Do you? [Y] [N]||Ask "Do you? [Y] [N]" with 2 (Y,N) options |- |Y||User pressed Y |- |S#7||What to do when the user pressed Y |- |N||User pressed N |- |P!Why not?!||What to do when the user pressed N |- |ND||End application |- |P!Good!||Display "Good!" on the screen |- |ND||End application |} |- |I#nquestion||Just like I$nquestion, except it operates with numbers (not letters such as Y and N). |- |L#xxyy |Locates a position (xx,yy) on the screen. {|border="1" |Example: |- |L#3002||Locates (30,2) or (30,02) on the screen |} |- |S#line |Skips to a line in the program. {|border="1" |Example: |- |S#2||Skips to line number 2 |- |P!Hi!||Prints "Hi!" at line number 2 |} |- |D$command (II function) |Runs DOS program. Use II to set parameters. II isn't required. {|border="1" |Example: |- |P!Enter Parameters |- |II||Asks user to supply parameters |- |D$EDIT||Executes command "EDIT" Note: D$ can work by itself assuming II has a value |} |- |F$file |Loads a value into the file variable. {|border="1" |Example: |- |F$Configuration File||Sets "Configuration File" as the file var. |} |- |L!||Loads the string and number variable from file. Don't worry about it until you understand it. |- |SV$string||Sets the string variable. |- |SV!number |Sets the number variable. {|border="1" |Example: |- |SV$Hello there!||Sets string variable to "Hello there!" |- |SV#9||Sets number variable to 9 |- |F$Hello!||Sets file variable to "Hello!" |- |S!||Saves string and number variables to "Hello!" |} |- |$givenvalue |If string variable equals givenvalue, execute next instruction. Else, execute instruction after next. {|border="1" |Example: |- |P!Enter a string value:||Types text on screen |- |V$||Asks user for the string variable |- |$Hello||If string variable = "Hello", |- |S#7||Go to line number 7. |- |P!You didn't type in "Hello"!||Else, print text. |- |ND||Exit |- |P!You typed in "Hello"!||Print text |- |ND||Exit |} |- |#givennumber||If number variable equals givennumber, execute next instruction. Else, execute instruction after next. Note: This is just like $givenvalue, except a number should be in the givennumber. |} ===Example=== The following example is a very trivial animation program named "Animation Master" in SLOS. It requires the user to hold down a key to switch between two screens to make the user think that the person is talking. <pre> C! P!Animation Master v2.1 P!Version for SL-OS P! I$4Ready for some fun? [Y] [N] Y S#15 y S#15 N S#13 n P!You don't know what you are missing! ND C! P! . . P! . - , I talking! P! --- L#0120 I$2Press [1] for next frame, hold [1] for animation, or [0] to exit. 1 S#25 0 ND C! P! . . P! . - Hello, am ! P! \___/ L#0120 I$2Press [1] for next frame, hold [1] for animation, or [0] to exit. 1 S#15 0 ND </pre> ==Limitations== SLOS's scripting environment contains a large list of limitations, and some are expressed in the following list: *The scripting language is not [http://en.wikipedia.org/wiki/Turing_completeness Turing-complete] *The screen always has a light-blue background with a white foreground *Conditional expressions are only allowed in a few operations *Programs get only one number variable and one string variable, which is a huge limitation for all but trivial programs *Loading and saving data files within a program is limited to saving the program's two variables *Looping can only be done with the only number variable that you have 9f15d20d19e5cfb653500eea1b68bb09cd58979b Jingle Bells 0 1583 1972 1926 2007-10-14T22:53:00Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Program-screenwindow.png|thumb|right|450px|Screen shot of Jingle Bell's {{Tech:Win16}} port]] Jingle Bells was an academic project at the end of the first semester of my first computer science class. The assignment was to visually and audibly render a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song] using {{Tech:Pascal}}, and I chose to implement the [http://en.wikipedia.org/wiki/Jingle_Bells Jingle Bells song]. The original version runs on DOS as a text console program and uses the PC speaker for audio. After writing [[ScreenWindow]], I ported Jingle Bells to the {{Tech:C}} programming language and the audio to {{Tech:MIDI}}, effectively modernizing the project with a Windows interface. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/jinglebells.zip Download the original Jingle Bells and its source code]''' *'''[https://www.moonlightdesign.org/steve/programs/screenwindow.exe Download the Windows version of Jingle Bells]''', which is installed with the full installation in the "examples\jingleb" folder of [[ScreenWindow]] *{{CatSetupFiles}} 8ce5b0497d154f07cbbbf003b10b52173c04239a 1989 1972 2007-10-15T00:29:10Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Program-screenwindow.png|thumb|right|450px|Screen shot of Jingle Bell's {{Tech:Win16}} port]] Jingle Bells was an academic project at the end of the first semester of my first computer science class. The assignment was to visually and audibly render a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song] using {{Tech:Pascal}}, and I chose to implement the [http://en.wikipedia.org/wiki/Jingle_Bells Jingle Bells song]. The original version runs on DOS as a text console program and uses the PC speaker for audio. After writing [[ScreenWindow]], I ported Jingle Bells to the {{Tech:C}} programming language and the audio to {{Tech:MIDI}}, effectively modernizing the project with a Windows interface. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/jinglebells.zip Download the original DOS-based Jingle Bells and its source code]''' *'''[https://www.moonlightdesign.org/steve/programs/screenwindow.exe Download the Win16 version of Jingle Bells]''', which is installed with the full installation in the "examples\jingleb" folder of [[ScreenWindow]] *'''[https://www.moonlightdesign.org/steve/programs/ezmidi32.exe Download the Win32 version of Jingle Bells]''', which is installed with the full installation in the "examples\jingle32" folder of [[EzMIDI32]] *{{CatSetupFiles}} 9950480a5cd2d1c1e109d92ca0db4c4eeda6d680 1991 1989 2007-10-15T00:31:13Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Program-screenwindow.png|thumb|right|450px|Screen shot of Jingle Bell's {{Tech:Win16}} port]] Jingle Bells was an academic project at the end of the first semester of my first computer science class. The assignment was to visually and audibly render a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song] using {{Tech:Pascal}}, and I chose to implement the [http://en.wikipedia.org/wiki/Jingle_Bells Jingle Bells song]. The original version runs on DOS as a text console program and uses the PC speaker for audio. After writing [[ScreenWindow]], I ported Jingle Bells to the {{Tech:C}} programming language and the audio to {{Tech:MIDI}}, effectively modernizing the project with a Windows interface. That Win16 version was later recompiled into a {{Tech:Win32}} version using [[EzMIDI32]]. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/jinglebells.zip Download the original DOS-based Jingle Bells and its source code]''' *'''[https://www.moonlightdesign.org/steve/programs/screenwindow.exe Download the Win16 version of Jingle Bells]''', which is installed with the full installation in the "examples\jingleb" folder of [[ScreenWindow]] *'''[https://www.moonlightdesign.org/steve/programs/ezmidi32.exe Download the Win32 version of Jingle Bells]''', which is installed with the full installation in the "examples\jingle32" folder of [[EzMIDI32]] *{{CatSetupFiles}} 7db35dba8ddf76182bac869a51b8695502edb772 MeowyMIDI 0 1544 1974 1824 2007-10-14T22:53:44Z Stevenlawrance 1 wikitext text/x-wiki MeowyMIDI is a [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards. It may also work on newer Sound Blaster audio cards that support sound font technology. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/meowymidi.zip Download MeowyMIDI]''' *{{CatSetupFiles}} ==Readme File== If you want to use the SBK file in your own MIDI files, use a MIDI editing program and create a controller fill for the duration of your song on the track you want with 0 and a value range from 3 to 3. Please note that the meow sounds are not in the list of instruments, so you'll need to select the following instruments for the sound you want to use on the track that you performed a controller fill on. {|border="1" !Instrument!!Sound |- |Acoustic Grand Piano||Meow 1 |- |Bright Acoustic Piano||Looping Purr |- |Electric Grand Piano||Purr Part 1 |- |Honky-tonk Piano||Purr Part 2 |- |Rhodes Piano||Meow 2 |} Enjoy MIDIs with meows!! :-) All you need to do is run SETUP.EXE from MS-Windows. 221ac9fb4b76aab64ced71da5bdcd5a8b3b0a560 1975 1974 2007-10-14T22:54:06Z Stevenlawrance 1 /* Download */ wikitext text/x-wiki MeowyMIDI is a [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards. It may also work on newer Sound Blaster audio cards that support sound font technology. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/meowymidi.zip Download MeowyMIDI]''' ==Readme File== If you want to use the SBK file in your own MIDI files, use a MIDI editing program and create a controller fill for the duration of your song on the track you want with 0 and a value range from 3 to 3. Please note that the meow sounds are not in the list of instruments, so you'll need to select the following instruments for the sound you want to use on the track that you performed a controller fill on. {|border="1" !Instrument!!Sound |- |Acoustic Grand Piano||Meow 1 |- |Bright Acoustic Piano||Looping Purr |- |Electric Grand Piano||Purr Part 1 |- |Honky-tonk Piano||Purr Part 2 |- |Rhodes Piano||Meow 2 |} Enjoy MIDIs with meows!! :-) All you need to do is run SETUP.EXE from MS-Windows. 797a0ad8f98c2e84836131015d4d827f2439e7cb KittyCat! Comm 0 1555 1976 1891 2007-10-14T22:54:29Z Stevenlawrance 1 /* Download */ wikitext text/x-wiki [[Image:KittyCatComm-About.png|right|thumb|350px|The "about" window in KittyCat! Comm 1.0. Clicking on the cat picture causes the window to "meow" on systems with audio capabilities]] KittyCat! Comm was a [http://en.wikipedia.org/wiki/Bulletin_board_system bulletin board system (BBS)] communication program for [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1] with ambitious plans. The vision was to support traditional text-based BBS systems and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics] along with arbitrary data exchange between remote programs and BBS-driven [[SLOS-DOS|SLOS scripting]]. This project was abandoned shortly after I started using the [http://en.wikipedia.org/wiki/Internet Internet] and [http://en.wikipedia.org/wiki/Internet_protocol_suite TCP/IP]; they made KittyCat! Comm obsolete. The implementation supports multiple telephone numbers per BBS, inter-program communication using the [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] mechanism in [http://en.wikipedia.org/wiki/Microsoft_Windows Windows], [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics] rendering in its console, and a partially-implemented MeowModem file transfer program. Almost every part of the system has [http://en.wikipedia.org/wiki/Cat cat]-themed names, such as its KittyDDE [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)]. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/kittycatcomm.exe Download the KittyCat! Comm installer]''' *'''[https://www.moonlightdesign.org/steve/programs/kittycatcomm.zip Download KittyCat! Comm and its source code]''' *{{CatSetupFiles}} ==Dialing Directory== The dialing directory was implemented using minimized [http://en.wikipedia.org/wiki/Multiple_document_interface multiple document interface (MDI)] windows, which appear as icons with a title underneath on [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1]. This was meant to make BBSes appear as programs as they did in the [http://en.wikipedia.org/wiki/Program_Manager Windows Program Manager]. In [http://en.wikipedia.org/wiki/Windows_95 Windows 95] and later versions, minimized MDI windows appear as small title bars with control icons, making the dialing directory's user interface appear drastically different. {| |[[Image:KittyCatCommWin31.png|thumb|400px|none|The dialing directory as it appears on a [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1] system]] |[[Image:KittyCatComm-BBSOptions.png|thumb|200px|none|The BBS options page, which appears when a BBS is double-clicked on or "restored" via MDI]] |- |[[Image:Program-kittycatcomm.png|thumb|400px|none|The dialing directory as it appears on a [http://en.wikipedia.org/wiki/Windows_95 Windows 95] system]] |[[Image:KittyCatComm-BBSConfig.png|thumb|300px|none|The properties page for a BBS. The horizontal scrollbar navigates through the BBS's telephone numbers]] |- |[[Image:KittyCatComm-ModemConfig.png|thumb|300px|none|The modem strings configuration dialog box]] |[[Image:KittyCatComm-Preferences.png|thumb|300px|none|The serial device and modem properties page]] |- |[[Image:KittyCatComm-KittyDDE.png|thumb|200px|none|Output from the KittyDDE diagnostics tool]] |} ==Terminal Console== The terminal console appears after a successful connection to a BBS is made. It can also be launched while KittyCat! Comm is not running, which puts the console into [http://en.wikipedia.org/wiki/Echo_%28computing%29 local-echo] mode. Support for ANSI and partial support for RIPscrip exists in the implementation, though [http://en.wikipedia.org/wiki/ZMODEM Zmodem] file transfer support was never finished. {| |[[Image:KittyCatComm-ARZ-Text.png|thumb|400px|none|ANSI text]] |[[Image:KittyCatComm-ARZ-Settings.png|thumb|300px|none|Console preferences dialog box. The default 20-color [http://en.wikipedia.org/wiki/Palette_%28computing%29 palette] in Windows 3.1 did not include a good brown color, so this console implements its own in its palette and calls it TrueBrown]] |- |[[Image:KittyCatComm-ARZ-RIP.png|thumb|400px|none|RIPscrip graphics test]] |[[Image:KittyCatComm-ARZ-About.png|thumb|300px|none|The "about" dialog box]] |} 5ebf760d7cb5b4eda32e60b56a00682544d091bf Horses 0 1569 1977 1899 2007-10-14T22:54:53Z Stevenlawrance 1 /* Download */ wikitext text/x-wiki [[Image:Program-horsesforwindows1 0.png|thumb|right|400px|Horses for Windows running in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]]] [[Image:HorsesDifficulty.png|thumb|right|400px|Horses for Windows running in [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1]. Four different difficulty levels exist in this game: Easy, Medium, Hard, and CATastrophe]] Horses for Windows is a [http://en.wikipedia.org/wiki/Horse_racing horse racing] [http://en.wikipedia.org/wiki/Strategy_game strategy game] written for {{Tech:Win16}}. Depending on the health and happiness of the player's and computer's horses, one horse wins a race while the other loses, though ties are possible. Between races, the player and the computer buy horse supplies from a shared store, giving priority to the player and leaving the computer with the leftovers. The objective of the game is thus to earn enough money through race betting to buy most or all supplies in the store on every round, leaving the computer's horse unhealthy and unhappy. Horses was inspired by a horse racing program that Robert "Bobby" Zoller, a friend in high school, wrote on a [http://en.wikipedia.org/wiki/TI-81 TI-81 graphing calculator]. That game used dots to represent the horses as they moved across the screen. Horses for Windows applied that same concept with graphics and added the shared store to make it a strategy game. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/horses.zip Download Horses for Windows]''' *'''[https://www.moonlightdesign.org/steve/programs/ghsprom.exe Download Horses for Windows, Prom Edition]''', which is a variant that I wrote for the [http://en.wikipedia.org/wiki/Prom prom] while in high school *{{CatSetupFiles}} ==Screen Shots== {| |[[Image:HorsesPlay.png|thumb|300px|none|The main game play screen, which lets the player place a bet for the race. A bet of zero dollars is permitted, but a negative bet is not allowed]] |[[Image:HorsesShop.png|thumb|350px|none|The shop. Although you can buy more than one horse, only one is used in the race, and at least one is required to race]] |- |[[Image:HorsesProgman.png|thumb|300px|none|The icons added by the installer in the [http://en.wikipedia.org/wiki/Program_Manager Windows Program Manager]]] |[[Image:HorsesAbout.png|thumb|350px|none|The program's "about" screen]] |} ==Cheating== To facilitate easy cheating, I wrote a saved game editor that enables users to adjust the attributes of their horse as well as the computer's horse, the supply levels at the shared shop, and the odds of winning the next race. [[Image:HorseEdit.png|thumb|300px|none|The Horses for Windows saved game editor]] ==Prom Edition== In 1997, I [https://www.moonlightdesign.org/steve/programs/ghsprom.exe adapted] Horses for Windows to have a [http://en.wikipedia.org/wiki/Prom prom] theme, which primarily affects the shared store. Instead of feed, horses, and stables, the store sells roses, tickets, and hotel rooms. [[Image:HorsesPromMain.png|thumb|400px|none|The main screen in Horses for Windows Prom Edition using [http://en.wikipedia.org/wiki/Wine_%28software%29 Wine] on [http://www.opensuse.org/ Novell openSUSE 10.2]]] [[Image:HorsesPromRacing.png|thumb|400px|none|The race in Horses for Windows Prom Edition using [http://en.wikipedia.org/wiki/Wine_%28software%29 Wine] on [http://www.opensuse.org/ Novell openSUSE 10.2]]] 9f62a0b60b53078b3b59575289243e055584acfc CatSetup 0 1558 1978 1854 2007-10-14T22:55:11Z Stevenlawrance 1 /* Download */ wikitext text/x-wiki [[Image:Program-catsetup.png|thumb|right|300px|CatSetup's [http://en.wikipedia.org/wiki/Splash_screen splash screen]]] CatSetup was a scriptable [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] [http://en.wikipedia.org/wiki/Installation_%28computer_programs%29 installer] and [http://en.wikipedia.org/wiki/Uninstaller uninstaller] primarily used to distribute [[Steven Lawrance#Software that I created|my software programs]]. It supports installation from multiple media types, including [http://en.wikipedia.org/wiki/Cd-rom CD-ROMs], one or more [http://en.wikipedia.org/wiki/Floppy_disk floppy disks], [http://en.wikipedia.org/wiki/Hard_drive hard drives], mounted network drives, and single-file [http://en.wikipedia.org/wiki/New_Executable EXE] downloads over the Internet. Installer size minimization and multitasking maximization were the primary [http://www.sei.cmu.edu/publications/documents/95.reports/95.tr.021.html quality attributes] considered during CatSetup's construction. By making CatSetup's disk footprint as small as possible, programs distributed using CatSetup could be downloaded more easily through through [http://en.wikipedia.org/wiki/Bulletin_board_system bulletin board systems (BBS)], which were prevalent in the mid-1990s. The disk footprint of CatSetup 1.9 -- the final version -- is 96,946 bytes, which is less than the size of a typical web page when images are considered. My interests in [http://en.wikipedia.org/wiki/Concurrency_%28computer_science%29 concurrency] led me to aggressively yield the [http://en.wikipedia.org/wiki/Cpu CPU] to other programs during the installation process, permitting the user to run background activities such as playing [http://en.wikipedia.org/wiki/Midi MIDI] files for music during the installation. {{Tech:Win16}} implements [http://en.wikipedia.org/wiki/Cooperative_multitasking#Cooperative_multitasking.2Ftime-sharing cooperative multitasking] between programs, so cooperation was necessary to give the illusion of concurrency. CatSetup's [http://en.wikipedia.org/wiki/Scripting_language scripting language] is named KittyScript, continuing the [http://en.wikipedia.org/wiki/Cat cat] theme of most of my early software. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/catsetupdocs.exe Download the CatSetup distribution]''', which includes the [https://www.moonlightdesign.org/steve/programs/catsetup/default.htm documentation] *'''[https://www.moonlightdesign.org/steve/programs/catsetup/default.htm View CatSetup's documentation]''' *{{CatSetupFiles}} ==Limitations== As a {{Tech:Win16}} program, CatSetup cannot handle [http://en.wikipedia.org/wiki/Long_file_name long file names] without the help of [http://en.wikipedia.org/wiki/Batch_file batch files] in the install process to rename short file names to long file names. This also means that CatSetup does not give access to any {{Tech:Win32}} functionality, such as the [http://en.wikipedia.org/wiki/Windows_Registry registry]. Installing files from a resource inside the installer's EXE file might write out a small amount of unknown memory contents at the end of the file when [http://en.wikipedia.org/wiki/Wine_%28software%29 Wine] is used to run CatSetup, and this might also happen in Windows when the resource is not compressed. This bug was never fixed due to me abandoning CatSetup for {{Tech:Win32}}-based installers. d7a5734083060d88b865d28c389b57ba63e74c6a LPD 0 1604 1980 2007-10-14T23:46:57Z Stevenlawrance 1 New page: PCL Page is a {{Tech:Win32}} extension of the University of Valencia student Agustin Lopez Bueno's {{Tech:Win16}} [http://en.wikipedia.org/wiki/Line_Printer_Daemon_protocol LPD] Server pro... wikitext text/x-wiki PCL Page is a {{Tech:Win32}} extension of the University of Valencia student Agustin Lopez Bueno's {{Tech:Win16}} [http://en.wikipedia.org/wiki/Line_Printer_Daemon_protocol LPD] Server program. This extension added support for [http://en.wikipedia.org/wiki/Windows_95 Windows 95] printing by rendering Hewlett Packard [http://en.wikipedia.org/wiki/Printer_Command_Language printer command language (PCL)] input onto a printer [http://en.wikipedia.org/wiki/Graphics_Device_Interface graphics device interface (GDI)] context, permitting LPD clients to print to any arbitrary destination printer that has a {{Tech:Win32}} driver. I wrote this extension to effectively save the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] thousands of dollars in their Windows 95 upgrade as this program eliminated the need to license [http://www.netmanage.com/products/rumba/index.asp WallData Rumba] for [http://en.wikipedia.org/wiki/AS/400 AS/400] printer support. IBM's [http://www.google.com/search?q=client+access%2F400 Client Access/400] for Windows 95 provided terminal access, but not local printer access. The GCISD widely deployed PCL Page in its administrative offices for AS/400-to-PC printing. The PCL interpreter, which understands the PCL This program can also be used for UNIX-to-PC printing just as easily as it is used for AS/400-to-PC printing. With the LPD Interpreter (compatible with the HP DeskJet 500), font variations such as bold, italics, and underline contained within reports and the like are retained and printed to any printer that has a Windows 95 printer driver. Other options such as Characters Per Inch and Lines Per Inch allow users to adjust font sizes with ease: With logging, you can keep track of the print jobs in order to quickly diagnose any problems that might arise with LPD printing. At the user's option, word wrapping may be enabled or disabled so that if a line of text exceeds the page width in the current number of characters per inch, the line can continue in the next line. With this system, you can have up to 20 printer queues that are referenced by the LPD client's destination queue. This way, you can customize font and print settings for different programs on your host without having to manually switch between settings on the client for different print jobs. Alternatively, you can have one LPD Printer System process printer data for up to 20 different printers that are either physically attached to the server's ports or on other Win95/NT computers across the network. The possibilities are limitless! If you have just upgraded to IBM's Client Access/400 for Win95 only to discover that PC Printer Sessions are no longer available, then this program is for you! This was exactly what happened to GCISD and was why this product was created. GCISD's only option before this program was to purchase the $100 WallData RUMBA Win95 product for each computer with a printer in its network, amounting to thousands of taxpayers' dollars. With the LPD Printer System for Win95, GCISD no longer needed to buy RUMBA upgrades in most cases and could continue the deployment of Win95 more quickly than before. If you have this situation and want more information on how to configure an AS/400 to use LPD, just e-mail me for more information :-). Note: Because some of the components of this program were created while I was employed at the Grapevine-Colleyville ISD, obtaining this program will require their permission. One component is under my control, so you will need my permission too. To make this less complicated, I can obtain the permission from GCISD for you if you ask. Thank you :-)! 517d30791de2109002137dffec61d3a75de1c920 1988 1980 2007-10-15T00:22:56Z Stevenlawrance 1 wikitext text/x-wiki [[Image:LpdServerConfig.png|frame|right|The LPD Printer System's configuration dialog box, which configures printer queues for the underlying LPD server and the PCL interpreter's settings]] [[Image:Program-lpd3.png|frame|right|The data flow architecture diagram of how the LPD Printer System for Win95 gets data to the printer]] The LPD Printer System for Win95 is a {{Tech:Win32}} extension of the [http://www.uv.es/~webuv/ingles/index.htm University of Valencia] student Agustin Lopez Bueno's {{Tech:Win16}} [http://en.wikipedia.org/wiki/Line_Printer_Daemon_protocol LPD] [http://ftp.man.poznan.pl/winsock-l/printing/prsrv11.txt Server program]. This extension added support for [http://en.wikipedia.org/wiki/Windows_95 Windows 95] printing by rendering Hewlett Packard [http://en.wikipedia.org/wiki/Printer_Command_Language printer command language (PCL)] input onto a printer [http://en.wikipedia.org/wiki/Graphics_Device_Interface graphics device interface (GDI)] context, permitting LPD clients to print to any arbitrary destination printer that has a {{Tech:Win32}} driver. I wrote this extension to effectively save the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] thousands of dollars in their Windows 95 upgrade as this program eliminated the need to license [http://www.netmanage.com/products/rumba/index.asp WallData Rumba] for [http://en.wikipedia.org/wiki/AS/400 AS/400] printer support. IBM's [http://www.google.com/search?q=client+access%2F400 Client Access/400] for Windows 95 provided terminal access, but not local printer access. The GCISD widely deployed PCL Page in its administrative offices for AS/400-to-PC printing. This print system extends the original Win16 program by using Windows's [http://en.wikipedia.org/wiki/Hooking hook] API to override the "Setup" button to invoke my {{Tech:Win32}}-based configuration program, which configures the LPD server to hand off incoming print jobs to pasprn32.exe. My pasprn32.exe program performed the PCL interpretation and printer GDI context printing. Interestingly, this strategy uncovered a difference between Windows 95 and [http://en.wikipedia.org/wiki/Windows_nt Windows NT]. In Windows NT and higher, the "Setup" button hook successfully launches my configuration program, but it fails to stop the LPD server from displaying its own configuration dialog box, which was properly suppressed in Windows 95. With logging, it's possible to keep track of the print jobs to quickly diagnose any problems that might arise with LPD printing. At the user's option, word wrapping may be enabled or disabled, among other options. This system supports up to twenty printer queues on one computer, permitting customization of font and print settings for different programs on a AS/400 or UNIX host without having to manually switch between settings on the client for different types of print jobs. It's also possible to have one computer running this system handle printing for up to twenty different printers that are either physically attached or on other computer across the network. Because some of the components of this program were created while I was employed at the Grapevine-Colleyville ISD and the [http://ftp.man.poznan.pl/winsock-l/printing/prsrv11.zip original program] is restricted for academic and educational use only, I cannot redistribute this program without permission. Fortunately, free alternatives exist in the marketplace. [[Image:LpdServer.png|frame|none|The underlying {{Tech:Win16}}-based LPD server, which was written by [http://www.uv.es/~webuv/ingles/index.htm University of Valencia] student Agustin Lopez Bueno]. I extended it using Windows's hook API]] da0e3a03015ce739c0e3f15bda3590eb5b460766 File:PclPage.png 6 1605 1981 2007-10-14T23:47:46Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:PclPage-Args.png 6 1606 1982 2007-10-14T23:51:12Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Template:Tech:Wine 10 1607 1983 2007-10-14T23:54:04Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/Wine_%28software%29 Wine] wikitext text/x-wiki [http://en.wikipedia.org/wiki/Wine_%28software%29 Wine] 78f62777e6638bdf58013e0dc7c819e04036b462 PCL Page 0 1608 1984 2007-10-14T23:54:31Z Stevenlawrance 1 New page: [[Image:PclPage.png|frame|right|Graphical user interface of PCL Page as it appears in {{Tech:Wine}}]] PCL Page is a simple {{Tech:Win16}} and {{Tech:DOS}} program that sends Hewlett Packar... wikitext text/x-wiki [[Image:PclPage.png|frame|right|Graphical user interface of PCL Page as it appears in {{Tech:Wine}}]] PCL Page is a simple {{Tech:Win16}} and {{Tech:DOS}} program that sends Hewlett Packard [http://en.wikipedia.org/wiki/Printer_Command_Language printer command language (PCL)] printer commands to the default printer. The supported commands include loading a page, loading an envelope, and ejecting a document. When run from DOS, the same executable runs the command-line version due to its inclusion as the {{Tech:Win16}} EXE file's DOS stub. [[Image:PclPage-Args.png|thumb|230px|none|The command line arguments that PCL Page supports]] ==Download== *'''[https://www.moonlightdesign.org/steve/programs/pclpage.zip Download PCL Page and its source code]''' e292a7fc7edfacf0fde84e6b7989dbb537bb5dc0 1992 1984 2007-10-15T00:35:12Z Stevenlawrance 1 wikitext text/x-wiki [[Image:PclPage.png|frame|right|Graphical user interface of PCL Page as it appears in {{Tech:Wine}} on [http://www.opensuse.org/ Novell openSUSE 10.2]]] PCL Page is a simple {{Tech:Win16}} and {{Tech:DOS}} program that sends Hewlett Packard [http://en.wikipedia.org/wiki/Printer_Command_Language printer command language (PCL)] printer commands to the default printer. The supported commands include loading a page, loading an envelope, and ejecting a document. When run from DOS, the same executable runs the command-line version due to its inclusion as the {{Tech:Win16}} EXE file's DOS stub. [[Image:PclPage-Args.png|thumb|230px|none|The command line arguments that PCL Page supports]] ==Download== *'''[https://www.moonlightdesign.org/steve/programs/pclpage.zip Download PCL Page and its source code]''' 5b640dd62868dafbe5e1c24e579b114e02819b98 File:LpdServer.png 6 1609 1986 2007-10-15T00:08:22Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:LpdServerConfig.png 6 1610 1987 2007-10-15T00:09:00Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:BidsToAsp.png 6 1611 1993 2007-10-15T00:41:54Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Bids-to-ASP 0 1612 1994 2007-10-15T00:47:19Z Stevenlawrance 1 New page: [[Image:BidsToAsp.png|frame|right|User interface of Bids-to-ASP running in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]]] Bids-to-ASP was a simple program that converts an [http://... wikitext text/x-wiki [[Image:BidsToAsp.png|frame|right|User interface of Bids-to-ASP running in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]]] Bids-to-ASP was a simple program that converts an [http://en.wikipedia.org/wiki/American_Airlines American Airlines] bidsheet file processed by bid software such as the Home Bidding System into a [http://en.wikipedia.org/wiki/Procomm_Plus Procomm Plus for DOS] aspect script for easy submission to [http://en.wikipedia.org/wiki/Sabre_%28computer_system%29 SABRE] over [http://en.wikipedia.org/wiki/CompuServe CompuServe]. This program was superseded by improvements that my father made to his {{Tech:BASIC}} version. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/bids2asp.zip Download Bids-to-ASP and its source code]''' 6669b9e16b5e3f35c5cd47ecbef7795add4ecca7 BBS Ads 0 1613 1995 2007-10-15T00:58:35Z Stevenlawrance 1 New page: [[Image:Program-ads.png|frame|right|Screen shot of the BBS ad for the Contrails BBS, which no longer exists]] BBS Ads was a simple series of programs that advertised [http://en.wikipedia.o... wikitext text/x-wiki [[Image:Program-ads.png|frame|right|Screen shot of the BBS ad for the Contrails BBS, which no longer exists]] BBS Ads was a simple series of programs that advertised [http://en.wikipedia.org/wiki/Bulletin_board_system bulletin board systems (BBSes)] via a {{Tech:Win16}} program. Customization for different BBSes was achieved by modifying [http://msdn2.microsoft.com/en-us/library/aa381050.aspx stringtable] and [http://en.wikipedia.org/wiki/BMP_file_format bitmap] resources in a Windows resource editor; no recompilation from the source code was necessary. The stringtables stored the name of the BBS as well as the [http://en.wikipedia.org/wiki/Sysop sysop] names, cosysop names, and telephone numbers. Optionally, a [http://en.wikipedia.org/wiki/WAV wave sound file] can be included as a resource and will automatically play on the program's startup. Please do not call any of the phone numbers listed in the ads as they no longer serve BBSes. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/bbsads.zip Download BBS Ads and its source code]''' 0d406843f7c097c1b20ad25af2ec0f872ca2d08f 1996 1995 2007-10-15T01:01:21Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Program-ads.png|frame|right|Screen shot of the BBS ad for the Contrails BBS, which no longer exists]] BBS Ads was a simple series of programs that advertised [http://en.wikipedia.org/wiki/Bulletin_board_system bulletin board systems (BBSes)] via a {{Tech:Win16}} program. Customization for different BBSes was achieved by modifying [http://msdn2.microsoft.com/en-us/library/aa381050.aspx stringtable] and [http://en.wikipedia.org/wiki/BMP_file_format bitmap] resources in a Windows resource editor; no recompilation from the source code was necessary. The stringtables stored the name of the BBS as well as the [http://en.wikipedia.org/wiki/Sysop sysop] names, cosysop names, and telephone numbers. Optionally, a [http://en.wikipedia.org/wiki/WAV wave sound file] can be included in the same directory as the ad's [http://en.wikipedia.org/wiki/New_Executable EXE file] and will automatically play on the program's startup, if present. Please do not call any of the phone numbers listed in the ads as they no longer serve BBSes. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/bbsads.zip Download BBS Ads and its source code]''' e5ae2965d90c8e0d38f09f94ba193a18d303758f AudioCD Pictures 0 1614 1998 2007-10-15T01:21:38Z Stevenlawrance 1 New page: [[Image:Program-dofcd.png|frame|right|AudioCD Pictures displaying pictures that are related to the "Dream of Flight" soundtrack]] AudioCD Pictures is a simple {{Tech:Win16}} program that c... wikitext text/x-wiki [[Image:Program-dofcd.png|frame|right|AudioCD Pictures displaying pictures that are related to the "Dream of Flight" soundtrack]] AudioCD Pictures is a simple {{Tech:Win16}} program that changes its displayed picture when time milestones are crossed while playing an [http://en.wikipedia.org/wiki/Compact_Disc audio compact disc (CD)]. The audio CD that I wrote this for initially was the [http://www.multiimage.com/videosales.html Dream of Flight] soundtrack, which was sold at the [http://store.crsmithmuseum.org/ American Airlines C.R. Smith Museum Gift Shop]. AudioCD Pictures can be adapted for other CDs by adjusting the [http://msdn2.microsoft.com/en-us/library/aa381050.aspx stringtables] and [http://en.wikipedia.org/wiki/BMP_file_format bitmaps] using a Windows resource editor. This program was not commissioned by [http://en.wikipedia.org/wiki/American_Airlines American Airlines] or [http://www.multiimage.com/ Multi Image Productions], nor does any official relationship exist between this program and them. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/dofhorses.zip Download AudioCD Pictures]''', which is pre-configured for the "Dream of Flight" soundtrack b94891844f83204979754305c8e6612fe45fe608 1999 1998 2007-10-15T01:24:40Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Program-dofcd.png|frame|right|AudioCD Pictures displaying pictures that are related to the "Dream of Flight" soundtrack]] AudioCD Pictures is a simple {{Tech:Win16}} program that changes its displayed picture when time milestones are crossed while playing an [http://en.wikipedia.org/wiki/Compact_Disc audio compact disc (CD)]. The audio CD that I wrote this for initially was the [http://www.multiimage.com/videosales.html Dream of Flight] soundtrack, which was sold at the [http://store.crsmithmuseum.org/ American Airlines C.R. Smith Museum Gift Shop]. AudioCD Pictures can be adapted for other CDs by adjusting the [http://msdn2.microsoft.com/en-us/library/aa381050.aspx stringtables] and [http://en.wikipedia.org/wiki/BMP_file_format bitmaps] using a Windows resource editor. This program was not commissioned by [http://en.wikipedia.org/wiki/American_Airlines American Airlines] or [http://www.multiimage.com/ Multi Image Productions], nor does any official relationship exist between this program and them. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/dofhorses.zip Download AudioCD Pictures]''', which is pre-configured for the "Dream of Flight" soundtrack. Although the installer says that it includes [[Horses|Horses for Windows]], it really does not; select "Dream of Flight" when asked 38ba5d9fa1ce83fd064843d3b46139d40b4cf91b 2000 1999 2007-10-15T01:29:03Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Program-dofcd.png|frame|right|AudioCD Pictures displaying pictures that are related to the "Dream of Flight" soundtrack]] AudioCD Pictures is a simple {{Tech:Win16}} program that changes its displayed picture when time milestones are crossed while playing an [http://en.wikipedia.org/wiki/Compact_Disc audio compact disc (CD)]. The audio CD that I wrote this for initially was the [http://www.multiimage.com/videosales.html Dream of Flight] soundtrack, which was sold at the [http://store.crsmithmuseum.org/ American Airlines C.R. Smith Museum Gift Shop]. AudioCD Pictures can be adapted for other CDs by adjusting the [http://msdn2.microsoft.com/en-us/library/aa381050.aspx stringtables] and [http://en.wikipedia.org/wiki/BMP_file_format bitmaps] using a Windows resource editor. This program was not commissioned by [http://en.wikipedia.org/wiki/American_Airlines American Airlines] or [http://www.multiimage.com/ Multi Image Productions], nor does any official relationship exist between this program and them. Originally, this program used an installer and uninstaller that I created named "Overnight [http://en.wikipedia.org/wiki/Hangar Hangar]." This was abandoned in favor of [[CatSetup]], which includes a scripting language and lessons learned from "Overnight Hangar." ==Download== *'''[https://www.moonlightdesign.org/steve/programs/dofhorses.zip Download AudioCD Pictures]''', which is pre-configured for the "Dream of Flight" soundtrack. Although the installer says that it includes [[Horses|Horses for Windows]], it really does not; select "Dream of Flight" when asked 161863f5c84f68be92cebcae2d60e74d0f661c42 2001 2000 2007-10-15T01:35:00Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Program-dofcd.png|frame|right|AudioCD Pictures displaying pictures that are related to the "Dream of Flight" soundtrack]] AudioCD Pictures is a simple {{Tech:Win16}} program that changes its displayed picture when time milestones are crossed while playing an [http://en.wikipedia.org/wiki/Compact_Disc audio compact disc (CD)]. The audio CD that I wrote this for initially was the [http://www.multiimage.com/videosales.html Dream of Flight] soundtrack, which was sold at the [http://store.crsmithmuseum.org/ American Airlines C.R. Smith Museum Gift Shop]. AudioCD Pictures can be adapted for other CDs by adjusting the [http://msdn2.microsoft.com/en-us/library/aa381050.aspx stringtables] and [http://en.wikipedia.org/wiki/BMP_file_format bitmaps] using a Windows resource editor. This program was not commissioned by [http://en.wikipedia.org/wiki/American_Airlines American Airlines] or [http://www.multiimage.com/ Multi Image Productions], nor does any relationship exist between this program and them. Originally, this program used an installer and uninstaller that I created named "Overnight [http://en.wikipedia.org/wiki/Hangar Hangar]." This was abandoned in favor of [[CatSetup]], which includes a scripting language and lessons learned from "Overnight Hangar." ==Download== *'''[https://www.moonlightdesign.org/steve/programs/dofhorses.zip Download AudioCD Pictures]''', which is pre-configured for the "Dream of Flight" soundtrack. Although the installer says that it includes [[Horses|Horses for Windows]], it really does not; select "Dream of Flight" when asked 883e2059c8878ab51d4dc33dc2fcb1304bbcf57e 256-Color SDK 0 1615 2003 2007-10-15T02:02:49Z Stevenlawrance 1 New page: [[Image:Program-256dll.png|frame|right|A demonstration program that tests the library's functions. This is included in the [https://www.moonlightdesign.org/steve/programs/256color.zip down... wikitext text/x-wiki [[Image:Program-256dll.png|frame|right|A demonstration program that tests the library's functions. This is included in the [https://www.moonlightdesign.org/steve/programs/256color.zip download]]] The 256-Color SDK is a small library that eases the process of loading and drawing 256-color bitmaps in {{Tech:Win16}}, including palette management. I used this library in most of my Win16 programs. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/256color.zip Download the 256-Color SDK and its source code]''' 1957800f3b3013d39c707533efcb1a1c48a730e7 2004 2003 2007-10-15T02:04:17Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Program-256dll.png|frame|right|A demonstration program that tests the library's functions. This is included in the [https://www.moonlightdesign.org/steve/programs/256color.zip download]. At the time, I had penned some of my software as Aries Software or a variant, though Aries Software was simply an unregistered alter-ego of me]] The 256-Color SDK is a small library that eases the process of loading and drawing 256-color bitmaps in {{Tech:Win16}}, including palette management. I used this library in most of my Win16 programs. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/256color.zip Download the 256-Color SDK and its source code]''' 60d89757fdd2549a6b8b48d90be2667b10324d8b 2005 2004 2007-10-15T02:08:04Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Program-256dll.png|frame|right|A demonstration program that tests the library's functions. This is included in the [https://www.moonlightdesign.org/steve/programs/256color.zip download]. At the time, I had penned some of my software as Aries Software or a variant, though Aries Software was simply an unregistered alter-ego of me]] The 256-Color SDK is a small library that eases the process of loading and drawing 256-color [http://en.wikipedia.org/wiki/BMP_file_format bitmaps] in {{Tech:Win16}}, including [http://en.wikipedia.org/wiki/Palette_%28computing%29 palette] management. I used this library in most of my Win16 programs. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/256color.zip Download the 256-Color SDK and its source code]''' 1331003981790cc0b2576942cb4948bc53ff6e74 2006 2005 2007-10-15T02:08:33Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Program-256dll.png|frame|right|A demonstration program that tests the library's functions. This is included in the [https://www.moonlightdesign.org/steve/programs/256color.zip download]. At the time, I had penned some of my software as Aries Software or a variant, though Aries Software was simply an unregistered alter-ego of me]] The 256-Color SDK is a small, simple library that eases the process of loading and drawing 256-color [http://en.wikipedia.org/wiki/BMP_file_format bitmaps] in {{Tech:Win16}}, including [http://en.wikipedia.org/wiki/Palette_%28computing%29 palette] management. I used this library in most of my Win16 programs. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/256color.zip Download the 256-Color SDK and its source code]''' 3ac62264b24ca185251bb9b9ca4258df980b88bf File:TrigGraphProperties.png 6 1616 2007 2007-10-15T02:17:58Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:TrigGraphAbout.png 6 1617 2008 2007-10-15T02:18:09Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Trig Grapher 0 1618 2009 2007-10-15T02:32:04Z Stevenlawrance 1 New page: [[Image:Program-grapher.png|thumb|400px|right|Screen shot of a sine]] The Trigonometric Grapher is a {{Tech:Win32}} program that graphs an adjustable equation onto its window. Sine, cosine... wikitext text/x-wiki [[Image:Program-grapher.png|thumb|400px|right|Screen shot of a sine]] The Trigonometric Grapher is a {{Tech:Win32}} program that graphs an adjustable equation onto its window. Sine, cosine, tangent, cotangent, secant, and cosecant function graphs are possible, and they can also be printed with a high resolution. The colors are fully adjustable. The graphed function is <code>y = A * xyz(B * x + C) + D</code>, where xyz is sin, cos, tan, cot, sec, or csc, depending on what is selected. Pi can be added to a text field by either typing a "p" in the field or clicking on the "Pi" button and then clicking in a text field with the upwards-pointing mouse cursor. When the Trigonometric Grapher is printing, the user can graph other functions as the printing happens in a background thread. This was my first multi-threaded program, though its simple architecture sidestepped concurrency issues by not using shared memory. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/triggrapher.zip Download the Trigonometric Grapher]''' ==Screen Shots== {| |[[Image:TrigGraphProperties.png|thumb|300px|none|Trigonometric Grapher's properties screen]] |[[Image:TrigGraphAbout.png|thumb|275px|none|The "about" screen, which discusses how I made this program for fun]] |} 3c2d3958a47b9fd71b93c905383650b5fcaa6740 2010 2009 2007-10-15T02:34:19Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Program-grapher.png|thumb|400px|right|Screen shot of a sine]] The Trigonometric Grapher is a {{Tech:Win32}} program that graphs an adjustable equation onto its window. [http://en.wikipedia.org/wiki/Trigonometry Sine, cosine, tangent, cotangent, secant, and cosecant] function graphs are possible, and they can also be printed with a high resolution. The colors are fully adjustable. The graphed function is <code>y = A * xyz(B * x + C) + D</code>, where xyz is sin, cos, tan, cot, sec, or csc, depending on what is selected. Pi can be added to a text field by either typing a "p" in the field or clicking on the "Pi" button and then clicking in a text field with the upwards-pointing mouse cursor. When the Trigonometric Grapher is printing, the user can graph other functions as the printing happens in a background thread. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] program, though its simple architecture sidestepped [http://en.wikipedia.org/wiki/Concurrency_%28computer_science%29 concurrency] issues by not using shared memory between the threads. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/triggrapher.zip Download the Trigonometric Grapher]''' ==Screen Shots== {| |[[Image:TrigGraphProperties.png|thumb|300px|none|Trigonometric Grapher's properties screen]] |[[Image:TrigGraphAbout.png|thumb|275px|none|The "about" screen, which discusses how I made this program for fun]] |} 9da3f555b995b589a67bcd33c4ebb5cd930d68a1 2011 2010 2007-10-15T02:36:10Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Program-grapher.png|thumb|400px|right|Screen shot of a sine]] The Trigonometric Grapher is a {{Tech:Win32}} program that graphs an adjustable equation onto its window. [http://en.wikipedia.org/wiki/Trigonometry Sine, cosine, tangent, cotangent, secant, and cosecant] function graphs are possible, and they can also be printed with a high resolution. The colors are fully adjustable. The graphed function is <code>y = A * xyz(B * x + C) + D</code>, where xyz is sin, cos, tan, cot, sec, or csc, depending on what is selected. Pi can be added to a text field by either typing a "p" in the field or clicking on the "Pi" button and then clicking in a text field with the upwards-pointing mouse cursor. When the Trigonometric Grapher is printing, the user can graph other functions as the printing happens in a background thread. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] program, though its simple architecture sidestepped [http://en.wikipedia.org/wiki/Concurrency_%28computer_science%29 concurrency] issues by not using shared memory between the threads. I wrote this program while I was taking a trigonometry class in high school. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/triggrapher.zip Download the Trigonometric Grapher]''' ==Screen Shots== {| |[[Image:TrigGraphProperties.png|thumb|300px|none|Trigonometric Grapher's properties screen]] |[[Image:TrigGraphAbout.png|thumb|275px|none|The "about" screen, which discusses how I made this program for fun]] |} 77b51b2ef8032b478973eed4a0a75469be8890b2 2012 2011 2007-10-15T02:48:36Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Program-grapher.png|thumb|400px|right|Screen shot of a sine]] The Trigonometric Grapher is a {{Tech:Win32}} program that graphs an adjustable equation onto its window. [http://en.wikipedia.org/wiki/Trigonometry Sine, cosine, tangent, cotangent, secant, and cosecant] function graphs are possible, and they can also be printed with a high resolution. The colors are fully adjustable. The graphed function is <code>y = A * xyz(B * x + C) + D</code>, where xyz is sin, cos, tan, cot, sec, or csc, depending on what is selected. Pi can be added to a text field by either typing a "p" in the field or clicking on the "Pi" button and then clicking in a text field with the upwards-pointing mouse cursor. When the Trigonometric Grapher is printing, the user can graph other functions as the printing happens in a background thread. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] program, though its simple architecture sidestepped [http://en.wikipedia.org/wiki/Concurrency_%28computer_science%29 concurrency] issues by not using shared memory between the threads. I wrote this program while I was taking a trigonometry class in high school. I later ported it to {{Tech:Win16}} for fun, but had move the background printing into the foreground in that version. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/triggrapher.zip Download the Win32 version of Trigonometric Grapher]''' *'''[https://www.moonlightdesign.org/steve/programs/triggraph-src.zip Download the Win32 and Win16 versions of Trigonometric Grapher and the source code]''' ==Screen Shots== {| |[[Image:TrigGraphProperties.png|thumb|300px|none|Trigonometric Grapher's properties screen]] |[[Image:TrigGraphAbout.png|thumb|275px|none|The "about" screen, which discusses how I made this program for fun]] |} 027f33e22dfd046ab4604bc1a0457395ba443f0b Steven Lawrance 0 1409 2013 2002 2007-10-15T02:49:42Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| ||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An ActiveX version of ScreenWindow that I created during the ActiveX hype||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}|| || |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program, making this more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] aa3ff903a2edc785be9758d49a9684660793ca48 2017 2013 2007-10-15T03:16:01Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| ||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor similar to KDE 2.2's cursor for Java||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program, making this more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] c43c68a2702a7eaca9fbd37edf7e86343ee8a829 2018 2017 2007-10-15T03:19:28Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| ||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||Program I wrote in college so that I could run servers from behind a firewall. When I put Linux on resnet.bryant.edu, I no longer needed this program, but it's still cool if you have Windows NT/2000 or 95/98||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}|| || |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program, making this more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] d61a1ffce1efab3814a1603380a989603b0120d5 2020 2018 2007-10-15T03:29:25Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| ||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||2,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program, making this more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] c039f4a8951020f4539d34853c7f485112b76577 2028 2020 2007-10-15T04:12:01Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}|| ||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program, making this more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 7d82dafce82e9fc8bc4e789534ff5ed0ad393aaf 2030 2028 2007-10-15T04:28:01Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-14'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program, making this more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 3f6e60b378256dd070b14c1c758fca23d90e6c13 2038 2030 2007-10-15T04:49:44Z Stevenlawrance 1 wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-17'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996-1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program, making this more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] e27935b6bf4c6e15d5490e075f819d224e541352 2039 2038 2007-10-15T04:51:49Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-17'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program, making this more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 426ea31a6545dc89329fa82e162eb3878ff28ed0 2040 2039 2007-10-15T05:31:43Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-17'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon|| || || |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program, making this more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 823d1cac2b789011c89f55ed34b57f8cac22d234 2041 2040 2007-10-15T05:33:02Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-17'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}|| || |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program, making this more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] e01353365d0c7499f8e20de654699076da3ef77e 2042 2041 2007-10-15T05:33:47Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-17'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}|| ||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for GCISD to allow employees to send AS/400 printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context, back in the good 'old days when printer manuals documented their control codes||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program, making this more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 8d596568a47da8e5fd661f70b52948d9901057d3 2050 2042 2007-10-17T20:08:20Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away by 2007-10-17'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}|| ||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 6acf34f8138612b55681d0ff5cc77579fa08856a 2051 2050 2007-10-19T14:42:47Z Stevenlawrance 1 wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away on 2007-10-20'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}|| ||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction. Read the History page for more information||{{Tech:PHP}}, {{Tech:SNMP}}|| || |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 9b6eb6972d0ba99c8b35a658d6ccc19c5b818bbc Bids-to-ASP 0 1612 2014 1994 2007-10-15T02:50:34Z Stevenlawrance 1 wikitext text/x-wiki [[Image:BidsToAsp.png|frame|right|User interface of Bids-to-ASP running in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]]] Bids-to-ASP was a simple program that converts an [http://en.wikipedia.org/wiki/American_Airlines American Airlines] bidsheet file processed by bid software such as the Home Bidding System into a [http://en.wikipedia.org/wiki/Procomm_Plus Procomm Plus for DOS] ASPect script for easy submission to [http://en.wikipedia.org/wiki/Sabre_%28computer_system%29 SABRE] over [http://en.wikipedia.org/wiki/CompuServe CompuServe]. This program was superseded by improvements that my father made to his {{Tech:BASIC}} version. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/bids2asp.zip Download Bids-to-ASP and its source code]''' d366ebfb2e98a1d4b49713452e2ded93476d035a ScreenWindowX 0 1619 2015 2007-10-15T03:07:30Z Stevenlawrance 1 New page: [[Image:Program-screenwindowctl.png|thumb|400px|right|Screen shot of the ScreenWindow ActiveX Control in action within an Internet Explorer document]] ScreenWindowX is an [http://en.wikipe... wikitext text/x-wiki [[Image:Program-screenwindowctl.png|thumb|400px|right|Screen shot of the ScreenWindow ActiveX Control in action within an Internet Explorer document]] ScreenWindowX is an [http://en.wikipedia.org/wiki/ActiveX ActiveX] control that was adapted from the code in [[ScreenWindow]] and given a [http://en.wikipedia.org/wiki/Component_Object_Model component object model (COM)] interface. This enables web pages, COM programs, and [http://en.wikipedia.org/wiki/.NET_Framework Microsoft .NET] applications to easily display block-text information as if they were writing to a text console. Synchronous and asynchronous user input are both supported to give applications the ability to interact with the user through ScreenWindowX. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/screenwindowctl.zip Download ScreenWindowX and its source code]''' 724775a3d0db175f99bfa3baae9a04506cb9d043 2049 2015 2007-10-15T16:17:18Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Program-screenwindowctl.png|thumb|400px|right|Screen shot of the ScreenWindow ActiveX Control in action within an Internet Explorer document]] ScreenWindowX is an [http://en.wikipedia.org/wiki/ActiveX ActiveX] control that was adapted from the code in [[ScreenWindow]] and given a [http://en.wikipedia.org/wiki/Component_Object_Model component object model (COM)] interface. This enables [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] web pages, COM programs, and [http://en.wikipedia.org/wiki/.NET_Framework Microsoft .NET] applications to easily display block-text information as if they were writing to a text console. Synchronous and asynchronous user input are both supported to give applications the ability to interact with the user through ScreenWindowX. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/screenwindowctl.zip Download ScreenWindowX and its source code]''' 4fb568fc7c6ad83d85d0d09059f43b9dd701908d Template:Tech:ActiveX 10 1620 2016 2007-10-15T03:12:34Z Stevenlawrance 1 New page: [http://en.wikipedia.org/wiki/ActiveX ActiveX] wikitext text/x-wiki [http://en.wikipedia.org/wiki/ActiveX ActiveX] 6150f7d236f1af8279a8a5ed672afb8cae6a6584 Main Page 0 1404 2019 1746 2007-10-15T03:21:25Z Stevenlawrance 1 wikitext text/x-wiki {| |valign="top"| Welcome to Moonlight Design -- the personal web site of [[Henry Lamb]] and [[Steven Lawrance]] ==Henry Lamb== [[Henry Lamb]] is a professional [http://en.wikipedia.org/wiki/Restaurant restaurateur] trained in both [http://www.baychef.com/programs/hospitality_and_restaurant.asp restaurant management] and [http://www.baychef.com/programs/culinary_arts.asp culinary arts] at the [http://www.baychef.com/ California Culinary Academy]. For a few years from the late 1990s to the early 2000s, Henry was a [http://en.wikipedia.org/wiki/Graphic_designer graphic designer] trained at the [http://www.artinstitutes.edu/sanfrancisco/ Art Institute of San Francisco] and the [http://www.academyart.edu/ Academy of Art University] Visit Henry's new wine blog: [http://glassofgrape.com/ Glass of Grape] ==Steven Lawrance== [[Steven Lawrance]] is an active practitioner of [http://en.wikipedia.org/wiki/Software_engineering software engineering] and [http://en.wikipedia.org/wiki/Open-source_software open-source software enthusiast] trained in [http://www.mse.cs.cmu.edu/ software engineering] at [http://www.mse.cs.cmu.edu/ Carnegie Mellon University] and [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ business administration] with [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems computer information systems] at [http://www.bryant.edu/ Bryant University] [[Steven Lawrance#Software Project Experience|Check out the list of software that Steve has either written or contributed to]] |valign="top" width="25%"| {|border="1" | <font size="5">[https://www.moonlightdesign.org/urllock/ IE URL Lock]</font> <font size="5">[http://gnucashtoqif.sourceforge.net/ GnuCashToQIF]</font> <font size="5">[https://www.moonlightdesign.org/thunderforce/ Thunderforce]</font> <font size="3">[https://www.moonlightdesign.org/dirlist DirList]</font> <font size="2">[[Serendipity|Team Serendipity Master of Software Engineering (MSE) studio project]]</font> <font size="2">[[Disk Imager]]</font> <font size="1">[[ScreenWindowX]]</font> <font size="1">[[Personal financial process]]</font> |} |} e958e95a24c9bb4cf89c25457084d9ff79024906 2027 2019 2007-10-15T04:08:30Z Stevenlawrance 1 wikitext text/x-wiki {| |valign="top"| Welcome to Moonlight Design -- the personal web site of [[Henry Lamb]] and [[Steven Lawrance]] ==Henry Lamb== [[Henry Lamb]] is a professional [http://en.wikipedia.org/wiki/Restaurant restaurateur] trained in both [http://www.baychef.com/programs/hospitality_and_restaurant.asp restaurant management] and [http://www.baychef.com/programs/culinary_arts.asp culinary arts] at the [http://www.baychef.com/ California Culinary Academy]. For a few years from the late 1990s to the early 2000s, Henry was a [http://en.wikipedia.org/wiki/Graphic_designer graphic designer] trained at the [http://www.artinstitutes.edu/sanfrancisco/ Art Institute of San Francisco] and the [http://www.academyart.edu/ Academy of Art University] Visit Henry's new wine blog: [http://glassofgrape.com/ Glass of Grape] ==Steven Lawrance== [[Steven Lawrance]] is an active practitioner of [http://en.wikipedia.org/wiki/Software_engineering software engineering] and [http://en.wikipedia.org/wiki/Open-source_software open-source software enthusiast] trained in [http://www.mse.cs.cmu.edu/ software engineering] at [http://www.mse.cs.cmu.edu/ Carnegie Mellon University] and [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ business administration] with [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems computer information systems] at [http://www.bryant.edu/ Bryant University] [[Steven Lawrance#Software Project Experience|Check out the list of software that Steve has either written or contributed to]] |valign="top" width="25%"| {|border="1" | <font size="5">[https://www.moonlightdesign.org/urllock/ IE URL Lock]</font> <font size="5">[http://gnucashtoqif.sourceforge.net/ GnuCashToQIF]</font> <font size="5">[https://www.moonlightdesign.org/thunderforce/ Thunderforce]</font> <font size="3">[https://www.moonlightdesign.org/dirlist DirList]</font> <font size="3">[[PortProxy]]</font> <font size="2">[[Serendipity|Team Serendipity]]</font> <font size="2">[[Disk Imager]]</font> <font size="1">[[ScreenWindowX]]</font> <font size="1">[[Personal financial process]]</font> |} |} 938d762cf74a84b4987d5b564fd802e09bde2828 File:PortProxy.png 6 1621 2021 2007-10-15T03:39:37Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 PortProxy 0 1622 2022 2007-10-15T03:49:11Z Stevenlawrance 1 New page: [[Image:PortProxy.png|frame|right|PortProxy 95 -- the Windows 95 version -- running in the system tray using [http://en.wikipedia.org/wiki/Wine_%28software%29 Wine] on [http://www.opensuse... wikitext text/x-wiki [[Image:PortProxy.png|frame|right|PortProxy 95 -- the Windows 95 version -- running in the system tray using [http://en.wikipedia.org/wiki/Wine_%28software%29 Wine] on [http://www.opensuse.org/ Novell openSUSE 10.2]. PortProxy is the icon closest to the right, next to the clock]] PortProxy is a [http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]. ==Configuration== PortProxy stores its configuration in the <code>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PortProxy\Parameters</code> [http://en.wikipedia.org/wiki/Windows_Registry registry] key. It can be dynamically configured using a command line interface via a localhost [http://en.wikipedia.org/wiki/Telnet telnet] connection to port 256. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/portproxy.zip Download PortProxy NT, PortProxy 95, and the source code]''' 65e12c0e813a15681fca4b7f6a4b54a832bfb0b7 2023 2022 2007-10-15T04:00:00Z Stevenlawrance 1 wikitext text/x-wiki [[Image:PortProxy.png|frame|right|PortProxy 95 -- the Windows 95 version -- running in the system tray using [http://en.wikipedia.org/wiki/Wine_%28software%29 Wine] on [http://www.opensuse.org/ Novell openSUSE 10.2]. PortProxy is the icon closest to the right, next to the clock]] PortProxy is a [http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/portproxy.zip Download PortProxy NT, PortProxy 95, and the source code]''' ==Configuration== PortProxy stores its configuration in the <code>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PortProxy\Parameters</code> [http://en.wikipedia.org/wiki/Windows_Registry registry] key. It can be dynamically configured using a command line interface via a localhost [http://en.wikipedia.org/wiki/Telnet telnet] connection to port 256. When connected to the configuration command line interface, the following commands can be used: {|class="sortable" border="1" !Command !Parameters !Meaning |- | + |port intaddr intport 6 |Adds a forwarded port *port: The local port that you want PortProxy to listen on *intaddr: The internal IPv4 address that you want PortProxy to connect to when new connections on the local listening port are established *intport: The port number on the internal address that you want PortProxy to connect to when new connections on the local listening port are established *6: This is the internet protocol type. The number six is the constant for TCP. UDP is not supported |- | - |port |Removes a forwarded port *port: The local port to remove that PortProxy is listening on |- |s |port |Returns whether or not the given local port is being forwarded by PortProxy *port: The local port to examine |- |t |port |Tests a local port for use by PortProxy or another application *port: The local port to examine |- |x | |Closes PortProxy |- |n | |No operation ([http://en.wikipedia.org/wiki/No-op no-op]) |} 0efd4155b650df3050761a039164b28053b7f5a0 2024 2023 2007-10-15T04:02:50Z Stevenlawrance 1 /* Configuration */ wikitext text/x-wiki [[Image:PortProxy.png|frame|right|PortProxy 95 -- the Windows 95 version -- running in the system tray using [http://en.wikipedia.org/wiki/Wine_%28software%29 Wine] on [http://www.opensuse.org/ Novell openSUSE 10.2]. PortProxy is the icon closest to the right, next to the clock]] PortProxy is a [http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/portproxy.zip Download PortProxy NT, PortProxy 95, and the source code]''' ==Configuration== PortProxy stores its configuration in the <code>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PortProxy\Parameters</code> [http://en.wikipedia.org/wiki/Windows_Registry registry] key. It can be dynamically configured using a command line interface via a localhost [http://en.wikipedia.org/wiki/Telnet telnet] connection to port 256. When connected to the configuration command line interface, the following commands can be used. Each command is terminated with a newline character. {|class="sortable" border="1" !Command !Parameters !Meaning |- | + |port intaddr intport 6 |Adds a forwarded port *port: The local port that you want PortProxy to listen on *intaddr: The internal IPv4 address that you want PortProxy to connect to when new connections on the local listening port are established *intport: The port number on the internal address that you want PortProxy to connect to when new connections on the local listening port are established *6: This is the internet protocol type. The number six is the constant for TCP. UDP is not supported |- | - |port |Removes a forwarded port *port: The local port to remove that PortProxy is listening on |- |s |port |Returns whether or not the given local port is being forwarded by PortProxy *port: The local port to examine |- |t |port |Tests a local port for use by PortProxy or another application *port: The local port to examine |- |x | |Closes PortProxy |- |n | |No operation ([http://en.wikipedia.org/wiki/No-op no-op]) |} 04f7283c7ce02bebe14d407a225a2782db76d61f 2025 2024 2007-10-15T04:05:20Z Stevenlawrance 1 wikitext text/x-wiki [[Image:PortProxy.png|frame|right|PortProxy 95 -- the Windows 95 version -- running in the system tray using [http://en.wikipedia.org/wiki/Wine_%28software%29 Wine] on [http://www.opensuse.org/ Novell openSUSE 10.2]. PortProxy is the icon closest to the right, next to the clock]] PortProxy is a [http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/portproxy.zip Download PortProxy NT, PortProxy 95, and the source code]''' ==Configuration== PortProxy stores its configuration in the <code>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PortProxy\Parameters</code> [http://en.wikipedia.org/wiki/Windows_Registry registry] key. It can be dynamically configured using a command line interface via a localhost [http://en.wikipedia.org/wiki/Telnet telnet] connection to port 256. When connected to the configuration command line interface, the following commands can be used. Each command is terminated with a newline character. Responses from the server begin with either a plus sign (+) for a positive response or a minus sign (-) for a negative response, similar to [https://www.moonlightdesign.org/dirlist/ DirList Server's] protocol. {|class="sortable" border="1" !Command !Parameters !Meaning |- | + |port intaddr intport 6 |Adds a forwarded port *port: The local port that you want PortProxy to listen on *intaddr: The internal IPv4 address that you want PortProxy to connect to when new connections on the local listening port are established *intport: The port number on the internal address that you want PortProxy to connect to when new connections on the local listening port are established *6: This is the internet protocol type. The number six is the constant for TCP. UDP is not supported |- | - |port |Removes a forwarded port *port: The local port to remove that PortProxy is listening on |- |s |port |Returns whether or not the given local port is being forwarded by PortProxy *port: The local port to examine |- |t |port |Tests a local port for use by PortProxy or another application *port: The local port to examine |- |x | |Closes PortProxy |- |n | |No operation ([http://en.wikipedia.org/wiki/No-op no-op]) |} 99f846f75c805d91176acf377c59cbc489c3fec7 2026 2025 2007-10-15T04:06:46Z Stevenlawrance 1 /* Configuration */ wikitext text/x-wiki [[Image:PortProxy.png|frame|right|PortProxy 95 -- the Windows 95 version -- running in the system tray using [http://en.wikipedia.org/wiki/Wine_%28software%29 Wine] on [http://www.opensuse.org/ Novell openSUSE 10.2]. PortProxy is the icon closest to the right, next to the clock]] PortProxy is a [http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/portproxy.zip Download PortProxy NT, PortProxy 95, and the source code]''' ==Configuration== PortProxy stores its configuration in the <code>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PortProxy\Parameters</code> [http://en.wikipedia.org/wiki/Windows_Registry registry] key. It can be dynamically configured using a command line interface via a localhost [http://en.wikipedia.org/wiki/Telnet telnet] connection to port 256. When connected to the configuration command line interface, the following commands can be used. Each command is terminated with a newline character. Responses from the server begin with either a plus sign (+) for a positive response or a minus sign (-) for a negative response, similar to [https://www.moonlightdesign.org/dirlist/ DirList Server's] protocol. {|class="sortable" border="1" !Command !Parameters !Meaning |- | + |port intaddr intport 6 |Adds a forwarded port *port: The local port that you want PortProxy to listen on *intaddr: The internal IPv4 address that you want PortProxy to connect to when new connections on the local listening port are established *intport: The port number on the internal address that you want PortProxy to connect to when new connections on the local listening port are established *6: This is the internet protocol type. The number six is the constant for TCP. UDP is not supported, though code for it exists as I was trying to make it work |- | - |port |Removes a forwarded port *port: The local port to remove that PortProxy is listening on |- |s |port |Returns whether or not the given local port is being forwarded by PortProxy *port: The local port to examine |- |t |port |Tests a local port for use by PortProxy or another application *port: The local port to examine |- |x | |Closes PortProxy |- |n | |No operation ([http://en.wikipedia.org/wiki/No-op no-op]) |} c309aeee07c36f8f5451849bd4a984d9d6f88010 Template:CatSetupFiles 10 1603 2029 1969 2007-10-15T04:22:34Z Stevenlawrance 1 wikitext text/x-wiki [https://www.moonlightdesign.org/steve/programs/catsetup-windows-system-files.zip Download CatSetup's required DLL files], if needed. Older versions of [[CatSetup]] required bwcc.dll, and the latest version requires ctl3dv2.dll. These go into the windows\system folder, not windows\system32. [http://en.wikipedia.org/wiki/Microsoft_Windows Windows] computers typically already have ctl3dv2.dll installed, which is a Microsoft library, and [http://en.wikipedia.org/wiki/Wine_%28software%29 Wine] has a built-in implementation 833e32a1e631c46af27434b910973bc6251d452a CPU ID 0 1557 2031 1848 2007-10-15T04:32:01Z Stevenlawrance 1 wikitext text/x-wiki [[Image:CpuID.png|frame|right|CPU ID's output dialog box, displaying information about an [http://en.wikipedia.org/wiki/Core2_duo Intel Core2 Duo CPU]]] CPU ID is a very simple program that displays information about the CPU that it happens to execute on. It is named after the [http://en.wikipedia.org/wiki/CPUID x86 CPUID instruction] call that is central to this program's purpose. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/cpuid.exe Download CPU ID]''' *'''[https://www.moonlightdesign.org/steve/programs/cpuid.zip Download CPU ID's Source Code]''' 9a5ed44bbc818fad191e02a7df49a5cff4728d57 2032 2031 2007-10-15T04:32:24Z Stevenlawrance 1 wikitext text/x-wiki [[Image:CpuID.png|frame|right|CPU ID's output dialog box, displaying information about an [http://en.wikipedia.org/wiki/Core2_duo Intel Core2 Duo CPU]]] CPU ID is a very simple program that displays information about the CPU that it happens to execute on. It is named after the [http://en.wikipedia.org/wiki/CPUID x86 CPUID instruction] call that is central to this program's operation. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/cpuid.exe Download CPU ID]''' *'''[https://www.moonlightdesign.org/steve/programs/cpuid.zip Download CPU ID's Source Code]''' 6beeafd732da3d83b029eafa60414e7484e46825 AriesType 0 1596 2033 1973 2007-10-15T04:35:29Z Stevenlawrance 1 wikitext text/x-wiki [[Image:AriesType-Splash.png|thumb|400px|right|AriesType's credits. Brian Dougher, a friend, helped out with the graphics and used his BASIC compiler to generate [http://en.wikipedia.org/wiki/EXE EXE] files from the {{Tech:BASIC}} source code]] AriesType was a [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities. At the time, I had penned some of my software as Aries Software or a variant, though Aries Software was simply an unregistered alter-ego of me. I wrote AriesType in lieu of taking an introductory computer class in high school, and the work primarily occurred during class hours in the same classroom at that class. My past experience at the time with computers and software enabled that position. This project was my first network-enabled multi-user application and was worthwhile for learning about related concerns. AriesType was completed as a working product, though its real-time student typing playback feature was never finished. The typing playback feature would have simulated what the screen looked like for a selected student's typing session, including delays and mistakes, though this likely would not have given much value to teachers. This and the email and paging features are classic examples of [http://en.wikipedia.org/wiki/Gold_plating_%28disambiguation%29 gold plating] that less-experienced software engineers suffer from. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/ariestype.exe Download the AriesType installer]''', which uses [[CatSetup]] for an easy installation instead of AriesType's own installer *{{CatSetupFiles}} ==Screen Shots== ===Typing=== Students touch type sentences into AriesType while the system logs the character and timing of each keystroke for later playback. {| |[[Image:AriesType-Typing.png|thumb|400px|none|View of a student typing sentences. AriesType collects metrics on accuracy and timing as the student types]] |[[Image:AriesType-TypingResults.png|thumb|400px|none|The results of a student's typing efforts, which are shown to the student after they finish. The teacher can also retrieve these results as they are stored on the network]] |} ===Sentence Editor=== Teachers can edit and choose the set of sentences that students type. {| |[[Image:AriesType-SentenceEditMenu.png|thumb|400px|none|Sentence editor menu, which also lets a teacher import sentences from an expansion floppy disk or another directory]] |[[Image:AriesType-SentenceEditor.png|thumb|400px|none|The sentence editor, which allows editing of one line at a time]] |} ===Menus=== AriesType displayed a different menu to students, teachers, and system operators. {| |[[Image:AriesType-GraphicalTeacherStartup.png|thumb|300px|none|The unfinished graphical version of AriesType. Only the teacher's menu had a graphical alternative]] |[[Image:AriesType-StudentMenu.png|thumb|400px|none|The student's menu. Menu item accessibility is controlled for each student by the teacher. If the exit option is disabled, then attempting to exit tells the student to reboot the computer]] |- |[[Image:AriesType-TeacherMenu.png|thumb|400px|none|The text version of the teacher's menu. Real-time playback of the student's typing was not finished, which is shown as the first item in the menu. In retrospect, such a feature is likely of little or no value to teachers]] |[[Image:AriesType-GraphicalTeacherMenu.png|thumb|400px|none|The graphical version of the teacher's menu with the paging submenu shown. Students can page teachers, similar to how a [http://en.wikipedia.org/wiki/Pager mobile pager] operates, but unlike [http://en.wikipedia.org/wiki/Instant_messaging instant messaging], a teacher must check for pages, and pages to not contain anything other than the name of the student who paged]] |- |[[Image:AriesType-SysopMenu.png|thumb|400px|none|The system operator's menu]] |} ===Email=== AriesType supported a limited form of local-only email. Users could not communicate with people outside of a network's AriesType installation using this system. {| |[[Image:AriesType-EmailPage1.png|thumb|400px|none|AriesType's email setup screen, which asks for the destination user and the subject line. The sender needs to get the destination name exactly correct or else risk having the recipient not seeing the message, and no warning is given to the sender if that happens]] |[[Image:AriesType-EmailPage2.png|thumb|400px|none|The message's contents were typed in one line at a time, and it was not possible to return to a previous line after the [Enter] key was pressed. Messages had a limit of 15 lines]] |- |[[Image:AriesType-EmailReader2.png|thumb|400px|none|The student, who was the recipient of the email in the previous screen shot, receives the message when they check for mail. Deleting a message was known as "killing" it, though it unfortunately does not work properly in the final version of AriesType]] |[[Image:AriesType-EmailReader.png|thumb|400px|none|AriesType included an initial email with the installation that highlighted my ego at the time]] |} 9396c3f03e567ef76de6dd236564c12e006a0512 FAT Recover 0 1420 2034 1510 2007-10-15T04:41:51Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Program-fatrecover.png|frame|right|Screen shot of FAT Recover displaying information about the first megabyte of my Dad's laptop before I ran mkdosfs on /dev/hda1 and reinstalled Windows 95 OSR2]] FAT Recover manually recover files from bad [http://en.wikipedia.org/wiki/Floppy_disk floppy disks] using FAT Recover and dd. By telling you the locations of all the files on your disk or disk image, you can use dd to extract the necessary parts. You could also use grep on a disk image to hunt for file header signatures for really messed-up disks. If anyone is interested in making a front end in something like GTK+/GNOME, please let me know. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/fatrecover-0.9.0.tar.gz Download Fat Recover]''' 69c9a150a492c675a1c5f68d5664355a8f1e545e 2035 2034 2007-10-15T04:42:08Z Stevenlawrance 1 /* Download */ wikitext text/x-wiki [[Image:Program-fatrecover.png|frame|right|Screen shot of FAT Recover displaying information about the first megabyte of my Dad's laptop before I ran mkdosfs on /dev/hda1 and reinstalled Windows 95 OSR2]] FAT Recover manually recover files from bad [http://en.wikipedia.org/wiki/Floppy_disk floppy disks] using FAT Recover and dd. By telling you the locations of all the files on your disk or disk image, you can use dd to extract the necessary parts. You could also use grep on a disk image to hunt for file header signatures for really messed-up disks. If anyone is interested in making a front end in something like GTK+/GNOME, please let me know. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/fatrecover-0.9.0.tar.gz Download Fat Recover's source code]''' 0a2b19804aeef38ef5f1cadb87637a50f43c5a2e 2036 2035 2007-10-15T04:46:41Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Program-fatrecover.png|frame|right|Screen shot of FAT Recover displaying information about the first megabyte of my Dad's laptop before I ran mkdosfs on /dev/hda1 and reinstalled Windows 95 OSR2]] FAT Recover enables users to manually recover files from bad [http://en.wikipedia.org/wiki/Floppy_disk floppy disks] and corrupted [http://en.wikipedia.org/wiki/File_Allocation_Table file allocation table (FAT)] filesystems on hard drives by displaying the locations of all files on a disk or disk image. With that information, it's possible to use dd to extract the files that you want to recover properly, even if the file is fragmented. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/fatrecover-0.9.0.tar.gz Download Fat Recover's source code]''' 866bcf15df1d5ffc0ba8c81b5449255f022d3238 2037 2036 2007-10-15T04:47:41Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Program-fatrecover.png|frame|right|Screen shot of FAT Recover displaying information about the first megabyte of my Dad's laptop before I ran mkdosfs on /dev/hda1 and reinstalled Windows 95 OSR2]] FAT Recover enables users to manually recover files from bad [http://en.wikipedia.org/wiki/Floppy_disk floppy disks] and corrupted [http://en.wikipedia.org/wiki/File_Allocation_Table file allocation table (FAT)] filesystems on hard drives by displaying the locations of all files on a disk or disk image. With that information, it's possible to use [http://en.wikipedia.org/wiki/Dd_%28Unix%29 dd] to extract the files that you want to recover properly, even if the file is fragmented. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/fatrecover-0.9.0.tar.gz Download Fat Recover's source code]''' 3b8c8c538369bec2d003fdde26cf140ed54597ed LPD 0 1604 2043 1988 2007-10-15T14:24:15Z Stevenlawrance 1 wikitext text/x-wiki [[Image:LpdServerConfig.png|frame|right|The LPD Printer System's configuration dialog box, which configures printer queues for the underlying LPD server and the PCL interpreter's settings]] [[Image:Program-lpd3.png|frame|right|The data flow architecture diagram of how the LPD Printer System for Win95 gets data to the printer]] The LPD Printer System for Win95 is a {{Tech:Win32}} extension of the [http://www.uv.es/~webuv/ingles/index.htm University of Valencia] student Agustin Lopez Bueno's {{Tech:Win16}} [http://en.wikipedia.org/wiki/Line_Printer_Daemon_protocol LPD] [http://ftp.man.poznan.pl/winsock-l/printing/prsrv11.txt Server program]. This extension added support for [http://en.wikipedia.org/wiki/Windows_95 Windows 95] printing by rendering Hewlett Packard [http://en.wikipedia.org/wiki/Printer_Command_Language printer command language (PCL)] input onto a printer [http://en.wikipedia.org/wiki/Graphics_Device_Interface graphics device interface (GDI)] context, permitting LPD clients to print to any arbitrary destination printer that has a {{Tech:Win32}} driver. I wrote this extension to effectively save the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] thousands of dollars in their Windows 95 upgrade as this program eliminated the need to license [http://www.netmanage.com/products/rumba/index.asp WallData Rumba] for [http://en.wikipedia.org/wiki/AS/400 AS/400] printer support. IBM's [http://www.google.com/search?q=client+access%2F400 Client Access/400] for Windows 95 provided terminal access, but not local printer access. The GCISD widely deployed PCL Page in its administrative offices for AS/400-to-PC printing. This print system extends the original Win16 program by using Windows's [http://en.wikipedia.org/wiki/Hooking hook] API to override the "Setup" button to invoke my {{Tech:Win32}}-based configuration program, which configures the LPD server to hand off incoming print jobs to pasprn32.exe. My pasprn32.exe program performed the PCL interpretation and printer GDI context printing. Interestingly, this strategy uncovered a difference between Windows 95 and [http://en.wikipedia.org/wiki/Windows_nt Windows NT]. In Windows NT and higher, the "Setup" button hook successfully launches my configuration program, but it fails to stop the LPD server from displaying its own configuration dialog box, which was properly suppressed in Windows 95. With logging, it's possible to keep track of the print jobs to quickly diagnose any problems that might arise with LPD printing. At the user's option, word wrapping may be enabled or disabled, among other options. This system supports up to twenty printer queues on one computer, permitting customization of font and print settings for different programs on a AS/400 or UNIX host without having to manually switch between settings on the client for different types of print jobs. It's also possible to have one computer running this system handle printing for up to twenty different printers that are either physically attached or on another computer across the network. Because some of the components of this program were created while I was employed at the Grapevine-Colleyville ISD and the [http://ftp.man.poznan.pl/winsock-l/printing/prsrv11.zip original program] is restricted for academic and educational use only, I cannot redistribute this program without permission. Fortunately, free alternatives exist in the marketplace. [[Image:LpdServer.png|frame|none|The underlying {{Tech:Win16}}-based LPD server, which was written by [http://www.uv.es/~webuv/ingles/index.htm University of Valencia] student Agustin Lopez Bueno]. I extended it using Windows's hook API]] 7390c367085faa735aef4d1bd3abb8d00c130bae 2044 2043 2007-10-15T14:24:45Z Stevenlawrance 1 wikitext text/x-wiki [[Image:LpdServerConfig.png|frame|right|The LPD Printer System's configuration dialog box, which configures printer queues for the underlying LPD server and the PCL interpreter's settings]] [[Image:Program-lpd3.png|frame|right|The data flow architecture diagram of how the LPD Printer System for Win95 gets data to the printer]] The LPD Printer System for Win95 is a {{Tech:Win32}} extension of the [http://www.uv.es/~webuv/ingles/index.htm University of Valencia] student Agustin Lopez Bueno's {{Tech:Win16}} [http://en.wikipedia.org/wiki/Line_Printer_Daemon_protocol LPD] [http://ftp.man.poznan.pl/winsock-l/printing/prsrv11.txt Server program]. This extension added support for [http://en.wikipedia.org/wiki/Windows_95 Windows 95] printing by rendering Hewlett Packard [http://en.wikipedia.org/wiki/Printer_Command_Language printer command language (PCL)] input onto a printer [http://en.wikipedia.org/wiki/Graphics_Device_Interface graphics device interface (GDI)] context, permitting LPD clients to print to any arbitrary destination printer that has a {{Tech:Win32}} driver. I wrote this extension to effectively save the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] thousands of dollars in their Windows 95 upgrade as this program eliminated the need to license [http://www.netmanage.com/products/rumba/index.asp WallData Rumba] for [http://en.wikipedia.org/wiki/AS/400 AS/400] printer support. IBM's [http://www.google.com/search?q=client+access%2F400 Client Access/400] for Windows 95 provided terminal access, but not local printer access. The GCISD widely deployed PCL Page in its administrative offices for AS/400-to-PC printing. This print system extends the original Win16 program by using Windows's [http://en.wikipedia.org/wiki/Hooking hook] API to override the "Setup" button to invoke my {{Tech:Win32}}-based configuration program, which configures the LPD server to hand off incoming print jobs to pasprn32.exe. My pasprn32.exe program performed the PCL interpretation and printer GDI context printing. Interestingly, this strategy uncovered a difference between Windows 95 and [http://en.wikipedia.org/wiki/Windows_nt Windows NT]. In Windows NT and higher, the "Setup" button hook successfully launches my configuration program, but it fails to stop the LPD server from displaying its own configuration dialog box, which was properly suppressed in Windows 95. With logging, it's possible to keep track of the print jobs to quickly diagnose any problems that might arise with LPD printing. At the user's option, word wrapping may be enabled or disabled, among other options. This system supports up to twenty printer queues on one computer, permitting customization of font and print settings for different programs on a AS/400 or UNIX host without having to manually switch between settings on the client for different types of print jobs. It's also possible to have one computer running this system handle printing for up to twenty different printers that are either physically attached or on another computer across the network. Because some of the components of this program were created while I was employed at the Grapevine-Colleyville ISD, and the [http://ftp.man.poznan.pl/winsock-l/printing/prsrv11.zip original program] is restricted for academic and educational use only, I cannot redistribute this program without permission. Fortunately, free alternatives exist in the marketplace. [[Image:LpdServer.png|frame|none|The underlying {{Tech:Win16}}-based LPD server, which was written by [http://www.uv.es/~webuv/ingles/index.htm University of Valencia] student Agustin Lopez Bueno]. I extended it using Windows's hook API]] 2d8e0038914f41325ce6613d7b2c94102bd0200d Jingle Bells 0 1583 2045 1991 2007-10-15T14:30:18Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Program-screenwindow.png|thumb|right|450px|Screen shot of Jingle Bell's {{Tech:Win16}} port]] Jingle Bells was an academic project at the end of the first semester of my first computer science class. The assignment was to visually and audibly render a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song] using {{Tech:Pascal}}, and I chose to implement the [http://en.wikipedia.org/wiki/Jingle_Bells Jingle Bells song]. The original version runs on DOS as a text console program and uses the [http://en.wikipedia.org/wiki/PC_speaker PC speaker] for audio. After writing [[ScreenWindow]], I ported Jingle Bells to the {{Tech:C}} programming language and the audio to {{Tech:MIDI}}, effectively modernizing the project with a Windows interface. That Win16 version was later recompiled into a {{Tech:Win32}} version using [[EzMIDI32]]. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/jinglebells.zip Download the original DOS-based Jingle Bells and its source code]''' *'''[https://www.moonlightdesign.org/steve/programs/screenwindow.exe Download the Win16 version of Jingle Bells]''', which is installed with the full installation in the "examples\jingleb" folder of [[ScreenWindow]] *'''[https://www.moonlightdesign.org/steve/programs/ezmidi32.exe Download the Win32 version of Jingle Bells]''', which is installed with the full installation in the "examples\jingle32" folder of [[EzMIDI32]] *{{CatSetupFiles}} 94f322648408802659b9c203d7983b2e2a3a23ac 2046 2045 2007-10-15T14:30:34Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Program-screenwindow.png|thumb|right|450px|Screen shot of Jingle Bell's {{Tech:Win16}} port]] Jingle Bells was an academic project at the end of the first semester of my first computer science class. The assignment was to visually and audibly render a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song] using {{Tech:Pascal}}, and I chose to implement the [http://en.wikipedia.org/wiki/Jingle_Bells Jingle Bells song]. The original version runs on {{Tech:DOS}} as a text console program and uses the [http://en.wikipedia.org/wiki/PC_speaker PC speaker] for audio. After writing [[ScreenWindow]], I ported Jingle Bells to the {{Tech:C}} programming language and the audio to {{Tech:MIDI}}, effectively modernizing the project with a Windows interface. That Win16 version was later recompiled into a {{Tech:Win32}} version using [[EzMIDI32]]. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/jinglebells.zip Download the original DOS-based Jingle Bells and its source code]''' *'''[https://www.moonlightdesign.org/steve/programs/screenwindow.exe Download the Win16 version of Jingle Bells]''', which is installed with the full installation in the "examples\jingleb" folder of [[ScreenWindow]] *'''[https://www.moonlightdesign.org/steve/programs/ezmidi32.exe Download the Win32 version of Jingle Bells]''', which is installed with the full installation in the "examples\jingle32" folder of [[EzMIDI32]] *{{CatSetupFiles}} fe73c893f35cd10a5308e77270c2db961cfd5d91 2053 2046 2007-10-19T14:45:54Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Program-screenwindow.png|thumb|right|450px|Screen shot of Jingle Bells's {{Tech:Win16}} port]] Jingle Bells was an academic project at the end of the first semester of my first computer science class. The assignment was to visually and audibly render a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song] using {{Tech:Pascal}}, and I chose to implement the [http://en.wikipedia.org/wiki/Jingle_Bells Jingle Bells song]. The original version runs on {{Tech:DOS}} as a text console program and uses the [http://en.wikipedia.org/wiki/PC_speaker PC speaker] for audio. After writing [[ScreenWindow]], I ported Jingle Bells to the {{Tech:C}} programming language and the audio to {{Tech:MIDI}}, effectively modernizing the project with a Windows interface. That Win16 version was later recompiled into a {{Tech:Win32}} version using [[EzMIDI32]]. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/jinglebells.zip Download the original DOS-based Jingle Bells and its source code]''' *'''[https://www.moonlightdesign.org/steve/programs/screenwindow.exe Download the Win16 version of Jingle Bells]''', which is installed with the full installation in the "examples\jingleb" folder of [[ScreenWindow]] *'''[https://www.moonlightdesign.org/steve/programs/ezmidi32.exe Download the Win32 version of Jingle Bells]''', which is installed with the full installation in the "examples\jingle32" folder of [[EzMIDI32]] *{{CatSetupFiles}} 6b05e7cc91e84aad14ad09184d6b441d8e937e15 ScreenWindow 0 1601 2047 1968 2007-10-15T14:32:42Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Program-screenwindow.png|thumb|right|450px|Screen shot of Jingle Bell's {{Tech:Win16}} port, which uses ScreenWindow]] ScreenWindow is a text console and {{Tech:MIDI}} sound library for {{Tech:Win16}} programs that I wrote to ease the annual [http://en.wikipedia.org/wiki/Christmas_song December holiday song] mid-year project for first-year computer science students at [http://www.gcisd-ghs.org/ Grapevine High School] when the course moved from {{Tech:DOS}} to [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1]. ScreenWindow's codebase was used in the subsequent {{Tech:Win32}} projects [[ScreenWindowX]] and [[EzMIDI32]]. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/screenwindow.exe Download ScreenWindow for Win16]''', which includes the documentation *'''[https://www.moonlightdesign.org/steve/programs/ezmidi32.exe Download the Win32 EzMIDI32 version]''', which is described in the [[EzMIDI32|EzMIDI32 page]] *{{CatSetupFiles}} ==Documentation== [[EzMIDI32]] has better documentation, which almost entirely applies to ScreenWindow, too. The functions below were written with contracts that resemble their implementations in {{Tech:DOS}}. {|class="sortable" border="1" !Function !Description |- |getch()||Reads the next character; does not wait for an enter; if enter, it reads it as cr; nothing is printed |- |getchar()||Reads the next character from stdin; waits for an enter; displays entry as it's typed including enter. Enter is read as newline. if newline is entry, it writes cr/nl pair (beginning of next line). First nl entered is not echoed; subsequent ones are. NLs entered are not reflected in memory; only the last cr (the one cvted to nl) is. |- |fgetchar()||Same as getchar() |- |getche()||Same as getch(), but echos character. Reads enter as carriage return. If newline is input, it goes to next line without cr on echo. |- |gets(str)||Echos input including enter. NL behavior is same as getchar(), except enter is not reflected in gets as it is in getchar. |- |perror(str)||Prints str then ": Error %i", where %i is current error number |- |puts(str)||Prints string, then a newline. |- |cgets(str)||str[0] is the max number of chars to get - 1. str[1] is the number of characters read - 1. When NL is entered, it goes to next line without cr first. NLs that are entered are saved in string. Very wild and wacky. |- |cputs(str)||Like puts, but does not translate NL into CR/NL. |- |cscanf, cprintf||Exactly like their scanf/printf counterparts, except that cprintf does not translate newlines into cr/nl. |- |getpass(str)||Asks for a password and returns a pointer to a string that has 8 chars in it, not counting the terminating null. Immediately after the 8th character is entered, the function automatically returns. Pressing enter before the 8th character returns the function. |- |gettext(x, y, x, y, buffer)||Gets text from the screen, ignoring CRs and NLs. |- |puttext(x, y, x, y, buffer)||Puts buffer onto the screen. |- |highvideo, lowvideo, normvideo||Makes fgColor high/low/normal intensity |- |delline||Moves remaining rows up by 1. |- |window(x, y, x, y)||Creates a text window. |- |_setcursortype(type)|| Selects no/underscore/block cursor |- |textattr(attr)||Selects attr text attribute |- |putch||Writes a character, but does not translate newline to CR/NL. |- |insline||Inserts a blank line in the current text window. |} The library included the following {{Tech:MIDI}} functions: *midiInitialize *midiNoteOn(channel, note, pressure : integer) *midiNoteOff(channel, note, velocity : integer) *midiInstrument(channel, instrument : integer) *midiUninitialize *midiHoldPedal(channel : integer; hold : boolean) *midiWait(ms : integer) e78f6dcfd1580a53de750b87766791e87241c152 2048 2047 2007-10-15T14:36:01Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Program-screenwindow.png|thumb|right|450px|Screen shot of Jingle Bell's {{Tech:Win16}} port, which uses ScreenWindow]] ScreenWindow is a text console and {{Tech:MIDI}} sound library for {{Tech:Win16}} programs that I wrote to ease the annual [http://en.wikipedia.org/wiki/Christmas_song December holiday song] mid-year project for first-year computer science students at [http://www.gcisd-ghs.org/ Grapevine High School] when the course moved from {{Tech:DOS}} to [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1]. The Windows version of [http://en.wikipedia.org/wiki/Turbo_Pascal Turbo Pascal] was used in the course, and ScreenWindow included [http://en.wikipedia.org/wiki/Turbo_Pascal#Units Pascal unit files] to access the ScreenWindow [http://en.wikipedia.org/wiki/Dynamic-link_library dynamic link library (DLL)] file. ScreenWindow's codebase was used in the subsequent {{Tech:Win32}} projects [[ScreenWindowX]] and [[EzMIDI32]]. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/screenwindow.exe Download ScreenWindow for Win16]''', which includes the documentation *'''[https://www.moonlightdesign.org/steve/programs/ezmidi32.exe Download the Win32 EzMIDI32 version]''', which is described in the [[EzMIDI32|EzMIDI32 page]] *{{CatSetupFiles}} ==Documentation== [[EzMIDI32]] has better documentation, which almost entirely applies to ScreenWindow, too. The functions below were written with contracts that resemble their implementations in {{Tech:DOS}}. {|class="sortable" border="1" !Function !Description |- |getch()||Reads the next character; does not wait for an enter; if enter, it reads it as cr; nothing is printed |- |getchar()||Reads the next character from stdin; waits for an enter; displays entry as it's typed including enter. Enter is read as newline. if newline is entry, it writes cr/nl pair (beginning of next line). First nl entered is not echoed; subsequent ones are. NLs entered are not reflected in memory; only the last cr (the one cvted to nl) is. |- |fgetchar()||Same as getchar() |- |getche()||Same as getch(), but echos character. Reads enter as carriage return. If newline is input, it goes to next line without cr on echo. |- |gets(str)||Echos input including enter. NL behavior is same as getchar(), except enter is not reflected in gets as it is in getchar. |- |perror(str)||Prints str then ": Error %i", where %i is current error number |- |puts(str)||Prints string, then a newline. |- |cgets(str)||str[0] is the max number of chars to get - 1. str[1] is the number of characters read - 1. When NL is entered, it goes to next line without cr first. NLs that are entered are saved in string. Very wild and wacky. |- |cputs(str)||Like puts, but does not translate NL into CR/NL. |- |cscanf, cprintf||Exactly like their scanf/printf counterparts, except that cprintf does not translate newlines into cr/nl. |- |getpass(str)||Asks for a password and returns a pointer to a string that has 8 chars in it, not counting the terminating null. Immediately after the 8th character is entered, the function automatically returns. Pressing enter before the 8th character returns the function. |- |gettext(x, y, x, y, buffer)||Gets text from the screen, ignoring CRs and NLs. |- |puttext(x, y, x, y, buffer)||Puts buffer onto the screen. |- |highvideo, lowvideo, normvideo||Makes fgColor high/low/normal intensity |- |delline||Moves remaining rows up by 1. |- |window(x, y, x, y)||Creates a text window. |- |_setcursortype(type)|| Selects no/underscore/block cursor |- |textattr(attr)||Selects attr text attribute |- |putch||Writes a character, but does not translate newline to CR/NL. |- |insline||Inserts a blank line in the current text window. |} The library included the following {{Tech:MIDI}} functions: *midiInitialize *midiNoteOn(channel, note, pressure : integer) *midiNoteOff(channel, note, velocity : integer) *midiInstrument(channel, instrument : integer) *midiUninitialize *midiHoldPedal(channel : integer; hold : boolean) *midiWait(ms : integer) d903b36d613010beee46aaa99e83b7f135966269 2052 2048 2007-10-19T14:45:38Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Program-screenwindow.png|thumb|right|450px|Screen shot of [[Jingle Bells|Jingle Bells's]] {{Tech:Win16}} port, which uses ScreenWindow]] ScreenWindow is a text console and {{Tech:MIDI}} sound library for {{Tech:Win16}} programs that I wrote to ease the annual [http://en.wikipedia.org/wiki/Christmas_song December holiday song] mid-year project for first-year computer science students at [http://www.gcisd-ghs.org/ Grapevine High School] when the course moved from {{Tech:DOS}} to [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1]. The Windows version of [http://en.wikipedia.org/wiki/Turbo_Pascal Turbo Pascal] was used in the course, and ScreenWindow included [http://en.wikipedia.org/wiki/Turbo_Pascal#Units Pascal unit files] to access the ScreenWindow [http://en.wikipedia.org/wiki/Dynamic-link_library dynamic link library (DLL)] file. ScreenWindow's codebase was used in the subsequent {{Tech:Win32}} projects [[ScreenWindowX]] and [[EzMIDI32]]. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/screenwindow.exe Download ScreenWindow for Win16]''', which includes the documentation *'''[https://www.moonlightdesign.org/steve/programs/ezmidi32.exe Download the Win32 EzMIDI32 version]''', which is described in the [[EzMIDI32|EzMIDI32 page]] *{{CatSetupFiles}} ==Documentation== [[EzMIDI32]] has better documentation, which almost entirely applies to ScreenWindow, too. The functions below were written with contracts that resemble their implementations in {{Tech:DOS}}. {|class="sortable" border="1" !Function !Description |- |getch()||Reads the next character; does not wait for an enter; if enter, it reads it as cr; nothing is printed |- |getchar()||Reads the next character from stdin; waits for an enter; displays entry as it's typed including enter. Enter is read as newline. if newline is entry, it writes cr/nl pair (beginning of next line). First nl entered is not echoed; subsequent ones are. NLs entered are not reflected in memory; only the last cr (the one cvted to nl) is. |- |fgetchar()||Same as getchar() |- |getche()||Same as getch(), but echos character. Reads enter as carriage return. If newline is input, it goes to next line without cr on echo. |- |gets(str)||Echos input including enter. NL behavior is same as getchar(), except enter is not reflected in gets as it is in getchar. |- |perror(str)||Prints str then ": Error %i", where %i is current error number |- |puts(str)||Prints string, then a newline. |- |cgets(str)||str[0] is the max number of chars to get - 1. str[1] is the number of characters read - 1. When NL is entered, it goes to next line without cr first. NLs that are entered are saved in string. Very wild and wacky. |- |cputs(str)||Like puts, but does not translate NL into CR/NL. |- |cscanf, cprintf||Exactly like their scanf/printf counterparts, except that cprintf does not translate newlines into cr/nl. |- |getpass(str)||Asks for a password and returns a pointer to a string that has 8 chars in it, not counting the terminating null. Immediately after the 8th character is entered, the function automatically returns. Pressing enter before the 8th character returns the function. |- |gettext(x, y, x, y, buffer)||Gets text from the screen, ignoring CRs and NLs. |- |puttext(x, y, x, y, buffer)||Puts buffer onto the screen. |- |highvideo, lowvideo, normvideo||Makes fgColor high/low/normal intensity |- |delline||Moves remaining rows up by 1. |- |window(x, y, x, y)||Creates a text window. |- |_setcursortype(type)|| Selects no/underscore/block cursor |- |textattr(attr)||Selects attr text attribute |- |putch||Writes a character, but does not translate newline to CR/NL. |- |insline||Inserts a blank line in the current text window. |} The library included the following {{Tech:MIDI}} functions: *midiInitialize *midiNoteOn(channel, note, pressure : integer) *midiNoteOff(channel, note, velocity : integer) *midiInstrument(channel, instrument : integer) *midiUninitialize *midiHoldPedal(channel : integer; hold : boolean) *midiWait(ms : integer) 64990d3dd775d7564a321aaec56a153d3b61d89f 2055 2052 2007-10-19T14:53:54Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Program-screenwindow.png|thumb|right|450px|Screen shot of [[Jingle Bells|Jingle Bells's]] {{Tech:Win16}} port, which uses ScreenWindow]] ScreenWindow is a text console and {{Tech:MIDI}} sound library for {{Tech:Win16}} programs that I wrote to ease the annual [http://en.wikipedia.org/wiki/Christmas_song December holiday song] mid-year project for first-year computer science students at [http://www.gcisd-ghs.org/ Grapevine High School] when the course moved from {{Tech:DOS}} to [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1]. The Windows version of [http://en.wikipedia.org/wiki/Turbo_Pascal Turbo Pascal] was used in the course, and ScreenWindow included [http://en.wikipedia.org/wiki/Turbo_Pascal#Units Pascal unit files] to access the ScreenWindow [http://en.wikipedia.org/wiki/Dynamic-link_library dynamic link library (DLL)] file. ScreenWindow's codebase was used in the subsequent {{Tech:Win32}} projects [[ScreenWindowX]] and [[EzMIDI32]]. Parts of ScreenWindow's code was reused from [[KittyCat! Comm|KittyCat! Comm's]] terminal console program. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/screenwindow.exe Download ScreenWindow for Win16]''', which includes the documentation *'''[https://www.moonlightdesign.org/steve/programs/ezmidi32.exe Download the Win32 EzMIDI32 version]''', which is described in the [[EzMIDI32|EzMIDI32 page]] *{{CatSetupFiles}} ==Documentation== [[EzMIDI32]] has better documentation, which almost entirely applies to ScreenWindow, too. The functions below were written with contracts that resemble their implementations in {{Tech:DOS}}. {|class="sortable" border="1" !Function !Description |- |getch()||Reads the next character; does not wait for an enter; if enter, it reads it as cr; nothing is printed |- |getchar()||Reads the next character from stdin; waits for an enter; displays entry as it's typed including enter. Enter is read as newline. if newline is entry, it writes cr/nl pair (beginning of next line). First nl entered is not echoed; subsequent ones are. NLs entered are not reflected in memory; only the last cr (the one cvted to nl) is. |- |fgetchar()||Same as getchar() |- |getche()||Same as getch(), but echos character. Reads enter as carriage return. If newline is input, it goes to next line without cr on echo. |- |gets(str)||Echos input including enter. NL behavior is same as getchar(), except enter is not reflected in gets as it is in getchar. |- |perror(str)||Prints str then ": Error %i", where %i is current error number |- |puts(str)||Prints string, then a newline. |- |cgets(str)||str[0] is the max number of chars to get - 1. str[1] is the number of characters read - 1. When NL is entered, it goes to next line without cr first. NLs that are entered are saved in string. Very wild and wacky. |- |cputs(str)||Like puts, but does not translate NL into CR/NL. |- |cscanf, cprintf||Exactly like their scanf/printf counterparts, except that cprintf does not translate newlines into cr/nl. |- |getpass(str)||Asks for a password and returns a pointer to a string that has 8 chars in it, not counting the terminating null. Immediately after the 8th character is entered, the function automatically returns. Pressing enter before the 8th character returns the function. |- |gettext(x, y, x, y, buffer)||Gets text from the screen, ignoring CRs and NLs. |- |puttext(x, y, x, y, buffer)||Puts buffer onto the screen. |- |highvideo, lowvideo, normvideo||Makes fgColor high/low/normal intensity |- |delline||Moves remaining rows up by 1. |- |window(x, y, x, y)||Creates a text window. |- |_setcursortype(type)|| Selects no/underscore/block cursor |- |textattr(attr)||Selects attr text attribute |- |putch||Writes a character, but does not translate newline to CR/NL. |- |insline||Inserts a blank line in the current text window. |} The library included the following {{Tech:MIDI}} functions: *midiInitialize *midiNoteOn(channel, note, pressure : integer) *midiNoteOff(channel, note, velocity : integer) *midiInstrument(channel, instrument : integer) *midiUninitialize *midiHoldPedal(channel : integer; hold : boolean) *midiWait(ms : integer) e57e4cb9334adccaf87a9ebff40a4031e90566bf KittyCat! Comm 0 1555 2054 1976 2007-10-19T14:51:54Z Stevenlawrance 1 /* Terminal Console */ wikitext text/x-wiki [[Image:KittyCatComm-About.png|right|thumb|350px|The "about" window in KittyCat! Comm 1.0. Clicking on the cat picture causes the window to "meow" on systems with audio capabilities]] KittyCat! Comm was a [http://en.wikipedia.org/wiki/Bulletin_board_system bulletin board system (BBS)] communication program for [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1] with ambitious plans. The vision was to support traditional text-based BBS systems and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics] along with arbitrary data exchange between remote programs and BBS-driven [[SLOS-DOS|SLOS scripting]]. This project was abandoned shortly after I started using the [http://en.wikipedia.org/wiki/Internet Internet] and [http://en.wikipedia.org/wiki/Internet_protocol_suite TCP/IP]; they made KittyCat! Comm obsolete. The implementation supports multiple telephone numbers per BBS, inter-program communication using the [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] mechanism in [http://en.wikipedia.org/wiki/Microsoft_Windows Windows], [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics] rendering in its console, and a partially-implemented MeowModem file transfer program. Almost every part of the system has [http://en.wikipedia.org/wiki/Cat cat]-themed names, such as its KittyDDE [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)]. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/kittycatcomm.exe Download the KittyCat! Comm installer]''' *'''[https://www.moonlightdesign.org/steve/programs/kittycatcomm.zip Download KittyCat! Comm and its source code]''' *{{CatSetupFiles}} ==Dialing Directory== The dialing directory was implemented using minimized [http://en.wikipedia.org/wiki/Multiple_document_interface multiple document interface (MDI)] windows, which appear as icons with a title underneath on [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1]. This was meant to make BBSes appear as programs as they did in the [http://en.wikipedia.org/wiki/Program_Manager Windows Program Manager]. In [http://en.wikipedia.org/wiki/Windows_95 Windows 95] and later versions, minimized MDI windows appear as small title bars with control icons, making the dialing directory's user interface appear drastically different. {| |[[Image:KittyCatCommWin31.png|thumb|400px|none|The dialing directory as it appears on a [http://en.wikipedia.org/wiki/Windows_3.1 Windows 3.1] system]] |[[Image:KittyCatComm-BBSOptions.png|thumb|200px|none|The BBS options page, which appears when a BBS is double-clicked on or "restored" via MDI]] |- |[[Image:Program-kittycatcomm.png|thumb|400px|none|The dialing directory as it appears on a [http://en.wikipedia.org/wiki/Windows_95 Windows 95] system]] |[[Image:KittyCatComm-BBSConfig.png|thumb|300px|none|The properties page for a BBS. The horizontal scrollbar navigates through the BBS's telephone numbers]] |- |[[Image:KittyCatComm-ModemConfig.png|thumb|300px|none|The modem strings configuration dialog box]] |[[Image:KittyCatComm-Preferences.png|thumb|300px|none|The serial device and modem properties page]] |- |[[Image:KittyCatComm-KittyDDE.png|thumb|200px|none|Output from the KittyDDE diagnostics tool]] |} ==Terminal Console== The terminal console appears after a successful connection to a BBS is made. It can also be launched while KittyCat! Comm is not running, which puts the console into [http://en.wikipedia.org/wiki/Echo_%28computing%29 local-echo] mode. Support for ANSI and partial support for RIPscrip exists in the implementation, though [http://en.wikipedia.org/wiki/ZMODEM Zmodem] file transfer support was never finished. Some of the console code was reused in [[ScreenWindow]]. {| |[[Image:KittyCatComm-ARZ-Text.png|thumb|400px|none|ANSI text]] |[[Image:KittyCatComm-ARZ-Settings.png|thumb|300px|none|Console preferences dialog box. The default 20-color [http://en.wikipedia.org/wiki/Palette_%28computing%29 palette] in Windows 3.1 did not include a good brown color, so this console implements its own in its palette and calls it TrueBrown]] |- |[[Image:KittyCatComm-ARZ-RIP.png|thumb|400px|none|RIPscrip graphics test]] |[[Image:KittyCatComm-ARZ-About.png|thumb|300px|none|The "about" dialog box]] |} 1b26d1bb202553b9907ccc6e10d6db6a9b9ca037 Template:Tech:PHPLib 10 1623 2056 2007-10-21T05:51:43Z Stevenlawrance 1 New page: [http://phplib.sourceforge.net/ PHPLib] wikitext text/x-wiki [http://phplib.sourceforge.net/ PHPLib] fdbd1f36cfb4cb97967d8a6785da393d5da0d524 Steven Lawrance 0 1409 2057 2051 2007-10-21T06:05:48Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away on 2007-10-20'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}|| ||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] e3847f6f2e27f6727289f84d30ded1624ba57023 2058 2057 2007-10-21T06:07:32Z Stevenlawrance 1 wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away on 2007-10-24'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}|| ||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 0954533d8da16fc9c8ae2634815cdc9a656e9b2b 2082 2058 2007-10-21T14:11:57Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away on 2007-10-24'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 34892c6e37cabc2319670458f8b976373e6375d4 2089 2082 2007-10-28T00:17:30Z Stevenlawrance 1 wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <big>'''This page and the linked wiki pages are a work in progress, and I am aggressively working on copying the content from my old web site to this wiki and filling in missing content. This notice will go away on 2007-10-28'''</big> <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] ded096ffdce3e6b722ee7213ec1bb69725736d41 2096 2089 2007-10-29T06:47:56Z Stevenlawrance 1 wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> Note that some content has not been written yet, and missing parts will be filled in before the end of 2007. Please feel free to ask me for more information about any project. ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] b2cb540f1b748a5d3d3b290d0aa81e07807072a4 2097 2096 2007-12-09T23:27:58Z Stevenlawrance 1 Thunderforce is now a group project wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> Note that some content has not been written yet, and missing parts will be filled in before the end of 2007. Please feel free to ask me for more information about any project. ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built a security testing framework for a new feature **Enhanced an internal testing tool's user interface **Helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security **Ensured that new releases of the core product did not break older API versions ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] fd455e23092bc3fbec7b1814190d2f4307ed17bf 2098 2097 2007-12-20T05:56:13Z Stevenlawrance 1 /* [http://www.salesforce.com/ Salesforce.com] */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> Note that some content has not been written yet, and missing parts will be filled in before the end of 2007. Please feel free to ask me for more information about any project. ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built the security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls partner access controls] **Championed an improvement to an anti-phishing feature's design successfully amid initial opposition **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and secure sockets layer (SSL) **Ensured that new releases of the core product did not break older API versions through gold files and automated testing ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] d740c347632322d91d0b40a9f11f9f60e15c6e27 2099 2098 2007-12-20T05:59:42Z Stevenlawrance 1 /* [http://www.salesforce.com/ Salesforce.com] */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> Note that some content has not been written yet, and missing parts will be filled in before the end of 2007. Please feel free to ask me for more information about any project. ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built the security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls partner access controls] **Championed an improvement to an anti-phishing feature's design successfully amid initial opposition **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL) **Ensured that new releases of the core product did not break older API versions through gold files and automated testing ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided award-winning hardware and software support **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 1563093c424b76eba15cf5800976dea9b4bf1c1f 2100 2099 2007-12-20T06:01:37Z Stevenlawrance 1 /* [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District] */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> Note that some content has not been written yet, and missing parts will be filled in before the end of 2007. Please feel free to ask me for more information about any project. ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built the security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls partner access controls] **Championed an improvement to an anti-phishing feature's design successfully amid initial opposition **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL) **Ensured that new releases of the core product did not break older API versions through gold files and automated testing ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle for all parts, including server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the Foundation's customized customer relationship management (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expression **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned and rolled out Firefox as the default web browser to all foundation users **Evaluated and purchased software **Managed software licenses **Maintained the Cisco network equipment, including the PIX firewall access control lists (ACLs) and router virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] e70fe4f795b571d91d0f2b0ed819829ecf25ab3b 2101 2100 2007-12-20T06:24:32Z Stevenlawrance 1 /* [http://www.sfaf.org/ San Francisco AIDS Foundation] */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> Note that some content has not been written yet, and missing parts will be filled in before the end of 2007. Please feel free to ask me for more information about any project. ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built the security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls partner access controls] **Championed an improvement to an anti-phishing feature's design successfully amid initial opposition **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL) **Ensured that new releases of the core product did not break older API versions through gold files and automated testing ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 0c871a42e0a8187d7805d2e2400f1529132232b3 2102 2101 2007-12-20T06:32:36Z Stevenlawrance 1 /* [http://www.salesforce.com/ Salesforce.com] */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> Note that some content has not been written yet, and missing parts will be filled in before the end of 2007. Please feel free to ask me for more information about any project. ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''API Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built the security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls partner access controls] **Championed an improvement to an anti-phishing feature's design successfully **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL) **Ensured that new releases of the core product did not break older API versions through gold files and automated testing ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 4245e26ad0fcbecfd6ebb913b0dd4544a81e0ae5 2103 2102 2007-12-31T03:18:16Z Stevenlawrance 1 /* [http://www.salesforce.com/ Salesforce.com] */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> Note that some content has not been written yet, and missing parts will be filled in before the end of 2007. Please feel free to ask me for more information about any project. ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Security Quality Engineer and API Engineer''' *January 2007 to present *'''Accomplishments''' **Built the security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls partner access controls] **Championed an improvement to an anti-phishing feature's design successfully **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL) **Ensured that new releases of the core product did not break older API versions through gold files and automated testing ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 5e60438681143ef559d217ee98f59077b68e3304 2104 2103 2008-05-11T05:38:46Z Stevenlawrance 1 /* [http://www.salesforce.com/ Salesforce.com] */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> Note that some content has not been written yet, and missing parts will be filled in before the end of 2007. Please feel free to ask me for more information about any project. ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Security Quality Engineer''' *January 2007 to present *'''Accomplishments''' **Built the security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls partner access controls] **Championed an improvement to an anti-phishing feature's design successfully **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL) **Ensured that new releases of the core product did not break older API versions through gold files and automated testing ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 370f64ed6d562dde508b541543002d812194c56e 2105 2104 2008-05-11T05:40:37Z Stevenlawrance 1 /* [http://www.salesforce.com/ Salesforce.com] */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> Note that some content has not been written yet, and missing parts will be filled in before the end of 2007. Please feel free to ask me for more information about any project. ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff - Quality''' *January 2007 to present *'''Accomplishments''' **Built the security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls partner access controls] **Championed an improvement to an anti-phishing feature's design successfully **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL) **Ensured that new releases of the core product did not break older API versions through gold files and automated testing ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] c33a5631a05b56ccccda19547609db0abb6af6ba 2106 2105 2008-05-11T05:41:43Z Stevenlawrance 1 /* [http://www.salesforce.com/ Salesforce.com] */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> Note that some content has not been written yet, and missing parts will be filled in before the end of 2007. Please feel free to ask me for more information about any project. ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff - Quality''' *January 2007 to present *'''Accomplishments''' **Built the security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls partner access controls] **Tracked down and, in many cases, fixed difficult threading and cache related bugs **Championed an improvement to an anti-phishing feature's design successfully **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL) **Ensured that new releases of the core product did not break older API versions through gold files and automated testing ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 725de67faf83f5b82a1dd6f39cb994e53a1db687 File:ResNet-ContactRCC.png 6 1624 2059 2007-10-21T06:09:40Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:ResNet-Dialpad.png 6 1625 2060 2007-10-21T06:09:50Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:ResNet-ErrorHandling.png 6 1626 2061 2007-10-21T06:10:01Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:ResNet-HallSelection.png 6 1627 2062 2007-10-21T06:10:12Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:ResNet-Move1.png 6 1628 2063 2007-10-21T06:11:21Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:ResNet-Move2.png 6 1629 2064 2007-10-21T06:11:29Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:ResNet-MoveFinished.png 6 1630 2065 2007-10-21T06:11:38Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:ResNet-MRTG.png 6 1631 2066 2007-10-21T06:11:46Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:ResNet-Museum.png 6 1632 2067 2007-10-21T06:11:59Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:ResNet-PortGroup.png 6 1633 2068 2007-10-21T06:12:10Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:ResNet-Ports.png 6 1634 2069 2007-10-21T06:12:23Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:ResNet-PortStack.png 6 1635 2070 2007-10-21T06:13:18Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:ResNet-ProfileEditMenu.png 6 1636 2071 2007-10-21T06:13:32Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:ResNet-SOCKS.png 6 1637 2072 2007-10-21T06:13:48Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:ResNet-Wizard1.png 6 1638 2073 2007-10-21T06:14:06Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:ResNet-Wizard2.png 6 1639 2074 2007-10-21T06:14:17Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:ResNet-Wizard3.png 6 1640 2075 2007-10-21T06:14:36Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:ResNet-Wizard4.png 6 1641 2076 2007-10-21T06:15:29Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:ResNet-Wizard5.png 6 1642 2077 2007-10-21T06:16:46Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:ResNet-WizardComplete.png 6 1643 2078 2007-10-21T06:17:46Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:GuestPass-Form.png 6 1644 2079 2007-10-21T06:30:41Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:GuestPass-Login.png 6 1645 2080 2007-10-21T06:30:51Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 CatSetup 0 1558 2083 1978 2007-10-21T15:50:41Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Program-catsetup.png|thumb|right|300px|CatSetup's [http://en.wikipedia.org/wiki/Splash_screen splash screen]]] CatSetup is a scriptable [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] [http://en.wikipedia.org/wiki/Installation_%28computer_programs%29 installer] and [http://en.wikipedia.org/wiki/Uninstaller uninstaller] primarily used to distribute [[Steven Lawrance#Software that I created|my software programs]]. It supports installation from multiple media types, including [http://en.wikipedia.org/wiki/Cd-rom CD-ROMs], one or more [http://en.wikipedia.org/wiki/Floppy_disk floppy disks], [http://en.wikipedia.org/wiki/Hard_drive hard drives], mounted network drives, and single-file [http://en.wikipedia.org/wiki/New_Executable EXE] downloads over the Internet. Installer size minimization and multitasking maximization were the primary [http://www.sei.cmu.edu/publications/documents/95.reports/95.tr.021.html quality attributes] considered during CatSetup's construction. By making CatSetup's disk footprint as small as possible, programs distributed using CatSetup could be downloaded more easily through through [http://en.wikipedia.org/wiki/Bulletin_board_system bulletin board systems (BBS)], which were prevalent in the mid-1990s. The disk footprint of CatSetup 1.9 -- the final version -- is 96,946 bytes, which is less than the size of a typical web page when images are considered. My interests in [http://en.wikipedia.org/wiki/Concurrency_%28computer_science%29 concurrency] led me to aggressively yield the [http://en.wikipedia.org/wiki/Cpu CPU] to other programs during the installation process, permitting the user to run background activities such as playing [http://en.wikipedia.org/wiki/Midi MIDI] files for music during the installation. {{Tech:Win16}} implements [http://en.wikipedia.org/wiki/Cooperative_multitasking#Cooperative_multitasking.2Ftime-sharing cooperative multitasking] between programs, so cooperation was necessary to give the illusion of concurrency. CatSetup's [http://en.wikipedia.org/wiki/Scripting_language scripting language] is named KittyScript, continuing the [http://en.wikipedia.org/wiki/Cat cat] theme of most of my early software. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/catsetupdocs.exe Download the CatSetup distribution]''', which includes the [https://www.moonlightdesign.org/steve/programs/catsetup/default.htm documentation] *'''[https://www.moonlightdesign.org/steve/programs/catsetup/default.htm View CatSetup's documentation]''' *{{CatSetupFiles}} ==Limitations== As a {{Tech:Win16}} program, CatSetup cannot handle [http://en.wikipedia.org/wiki/Long_file_name long file names] without the help of [http://en.wikipedia.org/wiki/Batch_file batch files] in the install process to rename short file names to long file names. This also means that CatSetup does not give access to any {{Tech:Win32}} functionality, such as the [http://en.wikipedia.org/wiki/Windows_Registry registry]. Installing files from a resource inside the installer's EXE file might write out a small amount of unknown memory contents at the end of the file when [http://en.wikipedia.org/wiki/Wine_%28software%29 Wine] is used to run CatSetup, and this might also happen in Windows when the resource is not compressed. This bug was never fixed due to me abandoning CatSetup for {{Tech:Win32}}-based installers. 251bfe5a4513e36630b90fc2492938182dfcbcf9 ResNet Online 0 1647 2084 2007-10-21T16:43:52Z Stevenlawrance 1 New page: ResNet Online was [http://www.bryant.edu/ Bryant University's] network registration and information site for computers in the university's residence halls. It has since been superseded by ... wikitext text/x-wiki ResNet Online was [http://www.bryant.edu/ Bryant University's] network registration and information site for computers in the university's residence halls. It has since been superseded by wireless networking and other computer information tracking mechanisms. While I was a junior at Bryant University, I sought to substantially improve the residence hall computer registration process. Previously, registration was a manual process that could take as long as three weeks between the time a student registers a computer and the time that the student's port is enabled. At the end of the Summer of 1999, I designed and implemented an automated process to handle residence hall computer registrations, making the process on-demand for students. My position as a residence hall computer consultant at the university enabled this to happen as I already knew the relevant contacts to make the system official. At the beginning of the Fall semester of 1999, students were able to quickly enable their residence hall Ethernet ports, and the system properly handled the load without failing. In addition to the registration process, ResNet Online included the following features: *Computer moving wizard *Student profile update page *Integration with Bryant University's [https://www.moonlightdesign.org/dirlist/ DirList2] student database to automatically retrieve student names, email addresses, and phone numbers, simplifying data entry for students *FTP-based authentication against Bryant University's IRIX sever for logins *Frequently asked questions that linked to each other using a simplified syntax similar to modern wiki software *Administrative Ethernet port management that used asynchronous communication with the web server to enable and disable ports -- years before XMLHttpRequest existed and AJAX was a buzzword **This was accomplished by communicating with the server by changing the image location of a progress bar to include the commands and the percentage to display in the URL's query parameters. The PHP script on the server enabled or disabled the requested ports and returned an image of the progress bar. If an error occurred, a HTTP error was returned. JavaScript on the client side handled success and error scenarios *Wizards persisted the data entered thus far into a PHPLib session, enabling students to complete a wizard between several sessions without having to re-enter any information during subsequent sessions *Traffic graphs from the multi-router traffic grapher (MRTG) *Squid proxy server statistics using a customized version of Prostat **I customized Prostat to retain its state into a file so that subsequent runs do not need to re-parse the log file parts that the previous run had processed. This substantially increased Prostat's summarization performance as I had it automatically run every 5 minutes for up-to-date statistics *DialPad proxy status information for the underlying DialPad proxy that I had set up 5ff80b81e3dcde2bddba1f4ed3ee6edffa8a1476 2085 2084 2007-10-21T16:48:38Z Stevenlawrance 1 wikitext text/x-wiki ResNet Online was [http://www.bryant.edu/ Bryant University's] network registration and information site for computers in the university's residence halls. It has since been superseded by wireless networking and other computer information tracking mechanisms. While I was a junior at Bryant University, I sought to substantially improve the residence hall computer registration process. Previously, registration was a manual process that could take as long as three weeks between the time a student registers a computer and the time that the student's port is enabled. At the end of the Summer of 1999, I designed and implemented an automated process to handle residence hall computer registrations, making the process on-demand for students. My position as a residence hall computer consultant at the university enabled this to happen as I already knew the relevant contacts to make the system official. At the beginning of the Fall semester of 1999, students were able to quickly enable their residence hall Ethernet ports, and the system properly handled the load without failing. In addition to the registration process, ResNet Online included the following features: *Computer moving wizard *Student profile update page *Integration with Bryant University's [https://www.moonlightdesign.org/dirlist/ DirList2] student database to automatically retrieve student names, email addresses, and phone numbers, simplifying data entry for students *FTP-based authentication against Bryant University's IRIX sever for logins *Frequently asked questions that linked to each other using a simplified syntax similar to modern wiki software *Administrative Ethernet port management that used asynchronous communication with the web server to enable and disable ports -- years before XMLHttpRequest existed and AJAX was a buzzword **This was accomplished by communicating with the server by changing the image location of a progress bar to include the commands and the percentage to display in the URL's query parameters. The PHP script on the server enabled or disabled the requested ports and returned an image of the progress bar. If an error occurred, a HTTP error was returned. JavaScript on the client side handled success and error scenarios *Wizards persisted the data entered thus far into a PHPLib session, enabling students to complete a wizard between several sessions without having to re-enter any information during subsequent sessions *Traffic graphs from the multi-router traffic grapher (MRTG) *Squid proxy server statistics using a customized version of Prostat **I customized Prostat to retain its state into a file so that subsequent runs do not need to re-parse the log file parts that the previous run had processed. This substantially increased Prostat's summarization performance as I had it automatically run every 5 minutes for up-to-date statistics *DialPad proxy status information for the underlying DialPad proxy that I had set up ''More information being written'' ==Screen Shots== [[Image:ResNet-ContactRCC.png]] [[Image:ResNet-Dialpad.png]] [[Image:ResNet-ErrorHandling.png]] [[Image:ResNet-HallSelection.png]] [[Image:ResNet-Move1.png]] [[Image:ResNet-Move2.png]] [[Image:ResNet-MoveFinished.png]] [[Image:ResNet-MRTG.png]] [[Image:ResNet-Museum.png]] [[Image:ResNet-PortGroup.png]] [[Image:ResNet-Ports.png]] [[Image:ResNet-PortStack.png]] [[Image:ResNet-ProfileEditMenu.png]] [[Image:ResNet-SOCKS.png]] [[Image:ResNet-Wizard1.png]] [[Image:ResNet-Wizard2.png]] [[Image:ResNet-Wizard3.png]] [[Image:ResNet-Wizard4.png]] [[Image:ResNet-Wizard5.png]] [[Image:ResNet-WizardComplete.png]] bb977df0eace3f60977a823b0e5901f64a15eb85 2086 2085 2007-10-21T16:52:30Z Stevenlawrance 1 wikitext text/x-wiki ResNet Online was [http://www.bryant.edu/ Bryant University's] network registration and information site for computers in the university's residence halls. It has since been superseded by wireless networking and other computer information tracking mechanisms. While I was a junior at Bryant University, I sought to substantially improve the residence hall computer registration process. Previously, registration was a manual process that could take as long as three weeks between the time a student registers a computer and the time that the student's port is enabled. At the end of the Summer of 1999, I designed and implemented an automated process to handle residence hall computer registrations, making the process on-demand for students. My position as a residence hall computer consultant at the university enabled this to happen as I already knew the relevant contacts to make the system official. At the beginning of the Fall semester of 1999, students were able to quickly enable their residence hall Ethernet ports, and the system properly handled the load without failing. In addition to the registration process, ResNet Online included the following features: *Computer moving wizard *Student profile update page *Integration with Bryant University's [https://www.moonlightdesign.org/dirlist/ DirList2] student database to automatically retrieve student names, email addresses, and phone numbers, simplifying data entry for students *FTP-based authentication against Bryant University's IRIX sever for logins *Frequently asked questions that linked to each other using a simplified syntax similar to modern wiki software *Administrative Ethernet port management that used asynchronous communication with the web server to enable and disable ports -- years before XMLHttpRequest existed and AJAX was a buzzword **This was accomplished by communicating with the server by changing the image location of a progress bar to include the commands and the percentage to display in the URL's query parameters. The PHP script on the server enabled or disabled the requested ports and returned an image of the progress bar. If an error occurred, a HTTP error was returned. JavaScript on the client side handled success and error scenarios *Wizards persisted the data entered thus far into a PHPLib session, enabling students to complete a wizard between several sessions without having to re-enter any information during subsequent sessions *Traffic graphs from the multi-router traffic grapher (MRTG) *Squid proxy server statistics using a customized version of Prostat **I customized Prostat to retain its state into a file so that subsequent runs do not need to re-parse the log file parts that the previous run had processed. This substantially increased Prostat's summarization performance as I had it automatically run every 5 minutes for up-to-date statistics *DialPad proxy status information for the underlying DialPad proxy that I had set up ''More information being written'' '''This page is actively being worked on...''' ==Screen Shots== [[Image:ResNet-ContactRCC.png]] [[Image:ResNet-Dialpad.png]] [[Image:ResNet-ErrorHandling.png]] [[Image:ResNet-HallSelection.png]] [[Image:ResNet-Move1.png]] [[Image:ResNet-Move2.png]] [[Image:ResNet-MoveFinished.png]] [[Image:ResNet-MRTG.png]] [[Image:ResNet-Museum.png]] [[Image:ResNet-PortGroup.png]] [[Image:ResNet-Ports.png]] [[Image:ResNet-PortStack.png]] [[Image:ResNet-ProfileEditMenu.png]] [[Image:ResNet-SOCKS.png]] [[Image:ResNet-Wizard1.png]] [[Image:ResNet-Wizard2.png]] [[Image:ResNet-Wizard3.png]] [[Image:ResNet-Wizard4.png]] [[Image:ResNet-Wizard5.png]] [[Image:ResNet-WizardComplete.png]] d010c8739c3394b2e8250cae83754d212f49b45e 2091 2086 2007-10-28T01:19:43Z Stevenlawrance 1 wikitext text/x-wiki [[Image:ResNet-Login.png|thumb|right|350px|ResNet Online's login page, which directs the user to log in using their email username and password]] ResNet Online was [http://www.bryant.edu/ Bryant University's] network registration and information site for computers in the university's residence halls. It has since been superseded by wireless networking and other computer information tracking mechanisms. ==Motivation== While I was a junior at Bryant University, I sought to substantially improve the residence hall computer registration process. Previously, registration was a manual process that could take as long as three weeks between the time a student registers a computer and the time that the student's port is enabled. At the end of the Summer of 1999, I designed and implemented an automated process to handle residence hall computer registrations, making the process on-demand for students. My position as a residence hall computer consultant at the university enabled this to happen as I already knew the relevant contacts to make the system official. At the beginning of the Fall semester of 1999, students were able to quickly enable their residence hall Ethernet ports, and the system properly handled the load without failing. In addition to the registration process, ResNet Online included the following features: *Computer moving wizard *Student profile update page *Integration with Bryant University's [https://www.moonlightdesign.org/dirlist/ DirList2] student database to automatically retrieve student names, email addresses, and phone numbers, simplifying data entry for students *FTP-based authentication against Bryant University's IRIX sever for logins *Frequently asked questions that linked to each other using a simplified syntax similar to modern wiki software *Administrative Ethernet port management that used asynchronous communication with the web server to enable and disable ports. This was years before XMLHttpRequest existed and AJAX was a buzzword **This was accomplished by communicating with the server by changing the image location of a progress bar to include the commands and the percentage to display in the URL's query parameters. The PHP script on the server enabled or disabled the requested ports and returned an image of the progress bar. If an error occurred, a HTTP error was returned. JavaScript on the client side handled success and error scenarios *Wizards persisted the data entered thus far into a PHPLib session, enabling students to complete a wizard between several sessions without having to re-enter any information during subsequent sessions *Traffic graphs from the multi-router traffic grapher (MRTG) *Squid proxy server statistics using a customized version of Prostat **I customized Prostat to retain its state into a file so that subsequent runs do not need to re-parse the log file parts that the previous run had processed. This substantially increased Prostat's summarization performance as I had it automatically run every 5 minutes for up-to-date statistics *[http://en.wikipedia.org/wiki/Yahoo%21_Voice DialPad] proxy status information for the underlying DialPad proxy that I had set up using [http://sovereignit.com/linux2.2/docs/ipmasqadm.man.txt ipmasqadm autofw] Please feel free to see the above capabilities in action through the screen shots below. ==Port Registration Wizard== When a student logs in, they are asked to select their hall and register their computer through the following sequence of pages. Students do not need to enter all information in one session; a PHPLib session stored any entered information until it was committed to the main database at the end of the wizard. The flow of the wizard largely reveals the database table relationships in ResNet's normalized MySQL database. {| |[[Image:ResNet-HallSelection.png|thumb|center|350px|Before the wizard begins, students are asked to select their residence hall from an image map. Bryant University has since added several new buildings, making this a historical photograph]] |[[Image:ResNet-Wizard1.png|thumb|center|350px|Students are asked for their identifying information. If their information was publicly visible in the [https://www.moonlightdesign.org/dirlist/ DirList database], most fields were pre-populated to reduce the amount of data entry required]] |- |[[Image:ResNet-Wizard2.png|thumb|center|350px|The pre-release version initially asked for the number of computers to register, but it was decided that the wizard should be limited to just one computer per registration in the first release]] |[[Image:ResNet-Wizard3.png|thumb|center|350px|Students are asked for the number of operating systems and virus scanners on their computer. Similar to computer counts, network card counts were locked to one for the final release]] |- |[[Image:ResNet-Wizard4.png|thumb|center|350px|Students are asked for their network card and virus scanner information. ResNet Online had a database table with a long list of all virus scanners that I could find at the time on Google. The data model allowed students to register computers in other residence halls, though this capability was likely not needed. Instructions for obtaining a [http://en.wikipedia.org/wiki/Media_Access_Control media access control (MAC) address] were written for all major operating systems, including [http://en.wikipedia.org/wiki/Red_Hat_Linux RedHat Linux]]] |[[Image:ResNet-Wizard5.png|thumb|center|350px|In this final step, students were asked for the wall network port that they plugged their computer into. Some residence halls had stickers with long strings of letters and numbers that did not match the example, so I created a client-side JavaScript-based port wizard that asks for that string along with which side they are plugging into (left or right), and the port wizard then automatically selected the appropriate port from the drop-down list from that information]] |- |[[Image:ResNet-WizardComplete.png|thumb|center|350px|After the port is activated, the data is committed to the database, and the student is notified. Behind the scenes, this process turned on the port using SNMP and saved the Cisco switch's NVRAM using a quick telnet session]] |} ==Profile Editing== [[Image:ResNet-ProfileEditMenu.png]] ==Moving Wizard== [[Image:ResNet-Move1.png]] [[Image:ResNet-Move2.png]] [[Image:ResNet-MoveFinished.png]] [[Image:ResNet-ErrorHandling.png]] ==Contact Residence Hall Computer Consultant (RCC)== [[Image:ResNet-ContactRCC.png]] ==Port Editing== [[Image:ResNet-PortGroup.png]] [[Image:ResNet-Ports.png]] [[Image:ResNet-PortStack.png]] ==Frequently Asked Questions== [[Image:ResNet-SOCKS.png]] ==Museum== [[Image:ResNet-Museum.png]] ==DialPad Status== [[Image:ResNet-Dialpad.png]] ==Network Traffic Graphs== [[Image:ResNet-MRTG.png]] ==Web Proxy Statistics== a4da36c5bf1c50f149473c1a1415fd87583da018 2092 2091 2007-10-28T01:30:01Z Stevenlawrance 1 wikitext text/x-wiki [[Image:ResNet-Login.png|thumb|right|350px|ResNet Online's login page, which directs the user to log in using their email username and password]] ResNet Online was [http://www.bryant.edu/ Bryant University's] network registration and information site for computers in the university's residence halls. It has since been superseded by wireless networking and other computer information tracking mechanisms. ==Motivation== While I was a junior at Bryant University, I sought to substantially improve the residence hall computer registration process. Previously, registration was a manual process that could take as long as three weeks between the time a student registers a computer and the time that the student's port is enabled. At the end of the Summer of 1999, I designed and implemented an automated process to handle residence hall computer registrations, making the process on-demand for students. My position as a residence hall computer consultant at the university enabled this to happen as I already knew the relevant contacts to make the system official. At the beginning of the Fall semester of 1999, students were able to quickly enable their residence hall Ethernet ports, and the system properly handled the load without failing. In addition to the registration process, ResNet Online included the following features: *Computer moving wizard *Student profile update page *Integration with Bryant University's [https://www.moonlightdesign.org/dirlist/ DirList2] student database to automatically retrieve student names, email addresses, and phone numbers, simplifying data entry for students *FTP-based authentication against Bryant University's IRIX sever for logins *Frequently asked questions that linked to each other using a simplified syntax similar to modern wiki software *Administrative Ethernet port management that used asynchronous communication with the web server to enable and disable ports. This was years before XMLHttpRequest existed and AJAX was a buzzword **This was accomplished by communicating with the server by changing the image location of a progress bar to include the commands and the percentage to display in the URL's query parameters. The PHP script on the server enabled or disabled the requested ports and returned an image of the progress bar. If an error occurred, a HTTP error was returned. JavaScript on the client side handled success and error scenarios *Wizards persisted the data entered thus far into a PHPLib session, enabling students to complete a wizard between several sessions without having to re-enter any information during subsequent sessions *Traffic graphs from the multi-router traffic grapher (MRTG) *Squid proxy server statistics using a customized version of Prostat **I customized Prostat to retain its state into a file so that subsequent runs do not need to re-parse the log file parts that the previous run had processed. This substantially increased Prostat's summarization performance as I had it automatically run every 5 minutes for up-to-date statistics *[http://en.wikipedia.org/wiki/Yahoo%21_Voice DialPad] proxy status information for the underlying DialPad proxy that I had set up using [http://sovereignit.com/linux2.2/docs/ipmasqadm.man.txt ipmasqadm autofw] Please feel free to see the above capabilities in action through the screen shots below. ==Port Registration Wizard== When a student logs in, they are asked to select their hall and register their computer through the following sequence of pages. Students do not need to enter all information in one session; a PHPLib session stored any entered information until it was committed to the main database at the end of the wizard. The flow of the wizard largely reveals the database table relationships in ResNet's normalized MySQL database. {| |[[Image:ResNet-HallSelection.png|thumb|center|350px|Before the wizard begins, students are asked to select their residence hall from an image map. Bryant University has since added several new buildings, making this a historical photograph]] |[[Image:ResNet-Wizard1.png|thumb|center|350px|Students are asked for their identifying information. If their information was publicly visible in the [https://www.moonlightdesign.org/dirlist/ DirList database], most fields were pre-populated to reduce the amount of data entry required]] |- |[[Image:ResNet-Wizard2.png|thumb|center|350px|The pre-release version initially asked for the number of computers to register, but it was decided that the wizard should be limited to just one computer per registration in the first release]] |[[Image:ResNet-Wizard3.png|thumb|center|350px|Students are asked for the number of operating systems and virus scanners on their computer. Similar to computer counts, network card counts were locked to one for the final release]] |- |[[Image:ResNet-Wizard4.png|thumb|center|350px|Students are asked for their network card and virus scanner information. ResNet Online had a database table with a long list of all virus scanners that I could find at the time on Google. The data model allowed students to register computers in other residence halls, though this capability was likely not needed. Instructions for obtaining a [http://en.wikipedia.org/wiki/Media_Access_Control media access control (MAC) address] were written for all major operating systems, including [http://en.wikipedia.org/wiki/Red_Hat_Linux RedHat Linux]]] |[[Image:ResNet-Wizard5.png|thumb|center|350px|In this final step, students were asked for the wall network port that they plugged their computer into. Some residence halls had stickers with long strings of letters and numbers that did not match the example, so I created a client-side JavaScript-based port wizard that asks for that string along with which side they are plugging into (left or right), and the port wizard then automatically selected the appropriate port from the drop-down list from that information]] |- |[[Image:ResNet-WizardComplete.png|thumb|center|350px|After the port is activated, the data is committed to the database, and the student is notified. Behind the scenes, this process turned on the port using SNMP and saved the Cisco switch's NVRAM using a quick telnet session]] |} ==Profile Editing== In addition to registering computers, students can modify their contact information and where their computers are located. {| |[[Image:ResNet-ProfileEditMenu.png|thumb|center|350px|]] |[[Image:ResNet-Move1.png|thumb|center|350px|]] |- |[[Image:ResNet-Move2.png|thumb|center|350px|]] |[[Image:ResNet-MoveFinished.png|thumb|center|350px|]] |- |[[Image:ResNet-ErrorHandling.png|thumb|center|350px|]] |} ==Contact Residence Hall Computer Consultant (RCC)== [[Image:ResNet-ContactRCC.png|thumb|center|350px|]] ==Port Editing== {| |[[Image:ResNet-PortGroup.png|thumb|center|350px|]] |[[Image:ResNet-Ports.png|thumb|center|350px|]] |- |[[Image:ResNet-PortStack.png|thumb|center|350px|]] |} ==Frequently Asked Questions== [[Image:ResNet-SOCKS.png|thumb|center|350px|]] ==Museum== [[Image:ResNet-Museum.png|thumb|center|350px|]] ==DialPad Status== [[Image:ResNet-Dialpad.png|thumb|center|350px|]] ==Network Traffic Graphs== [[Image:ResNet-MRTG.png|thumb|center|350px|]] ==Web Proxy Statistics== 4c3b2afe659c233a003aef984860caded2106109 2093 2092 2007-10-28T01:40:10Z Stevenlawrance 1 /* Profile Editing */ wikitext text/x-wiki [[Image:ResNet-Login.png|thumb|right|350px|ResNet Online's login page, which directs the user to log in using their email username and password]] ResNet Online was [http://www.bryant.edu/ Bryant University's] network registration and information site for computers in the university's residence halls. It has since been superseded by wireless networking and other computer information tracking mechanisms. ==Motivation== While I was a junior at Bryant University, I sought to substantially improve the residence hall computer registration process. Previously, registration was a manual process that could take as long as three weeks between the time a student registers a computer and the time that the student's port is enabled. At the end of the Summer of 1999, I designed and implemented an automated process to handle residence hall computer registrations, making the process on-demand for students. My position as a residence hall computer consultant at the university enabled this to happen as I already knew the relevant contacts to make the system official. At the beginning of the Fall semester of 1999, students were able to quickly enable their residence hall Ethernet ports, and the system properly handled the load without failing. In addition to the registration process, ResNet Online included the following features: *Computer moving wizard *Student profile update page *Integration with Bryant University's [https://www.moonlightdesign.org/dirlist/ DirList2] student database to automatically retrieve student names, email addresses, and phone numbers, simplifying data entry for students *FTP-based authentication against Bryant University's IRIX sever for logins *Frequently asked questions that linked to each other using a simplified syntax similar to modern wiki software *Administrative Ethernet port management that used asynchronous communication with the web server to enable and disable ports. This was years before XMLHttpRequest existed and AJAX was a buzzword **This was accomplished by communicating with the server by changing the image location of a progress bar to include the commands and the percentage to display in the URL's query parameters. The PHP script on the server enabled or disabled the requested ports and returned an image of the progress bar. If an error occurred, a HTTP error was returned. JavaScript on the client side handled success and error scenarios *Wizards persisted the data entered thus far into a PHPLib session, enabling students to complete a wizard between several sessions without having to re-enter any information during subsequent sessions *Traffic graphs from the multi-router traffic grapher (MRTG) *Squid proxy server statistics using a customized version of Prostat **I customized Prostat to retain its state into a file so that subsequent runs do not need to re-parse the log file parts that the previous run had processed. This substantially increased Prostat's summarization performance as I had it automatically run every 5 minutes for up-to-date statistics *[http://en.wikipedia.org/wiki/Yahoo%21_Voice DialPad] proxy status information for the underlying DialPad proxy that I had set up using [http://sovereignit.com/linux2.2/docs/ipmasqadm.man.txt ipmasqadm autofw] Please feel free to see the above capabilities in action through the screen shots below. ==Port Registration Wizard== When a student logs in, they are asked to select their hall and register their computer through the following sequence of pages. Students do not need to enter all information in one session; a PHPLib session stored any entered information until it was committed to the main database at the end of the wizard. The flow of the wizard largely reveals the database table relationships in ResNet's normalized MySQL database. {| |[[Image:ResNet-HallSelection.png|thumb|center|350px|Before the wizard begins, students are asked to select their residence hall from an image map. Bryant University has since added several new buildings, making this a historical photograph]] |[[Image:ResNet-Wizard1.png|thumb|center|350px|Students are asked for their identifying information. If their information was publicly visible in the [https://www.moonlightdesign.org/dirlist/ DirList database], most fields were pre-populated to reduce the amount of data entry required]] |- |[[Image:ResNet-Wizard2.png|thumb|center|350px|The pre-release version initially asked for the number of computers to register, but it was decided that the wizard should be limited to just one computer per registration in the first release]] |[[Image:ResNet-Wizard3.png|thumb|center|350px|Students are asked for the number of operating systems and virus scanners on their computer. Similar to computer counts, network card counts were locked to one for the final release]] |- |[[Image:ResNet-Wizard4.png|thumb|center|350px|Students are asked for their network card and virus scanner information. ResNet Online had a database table with a long list of all virus scanners that I could find at the time on Google. The data model allowed students to register computers in other residence halls, though this capability was likely not needed. Instructions for obtaining a [http://en.wikipedia.org/wiki/Media_Access_Control media access control (MAC) address] were written for all major operating systems, including [http://en.wikipedia.org/wiki/Red_Hat_Linux RedHat Linux]]] |[[Image:ResNet-Wizard5.png|thumb|center|350px|In this final step, students were asked for the wall network port that they plugged their computer into. Some residence halls had stickers with long strings of letters and numbers that did not match the example, so I created a client-side JavaScript-based port wizard that asks for that string along with which side they are plugging into (left or right), and the port wizard then automatically selected the appropriate port from the drop-down list from that information]] |- |[[Image:ResNet-WizardComplete.png|thumb|center|350px|After the port is activated, the data is committed to the database, and the student is notified. Behind the scenes, this process turned on the port using SNMP and saved the Cisco switch's NVRAM using a quick telnet session]] |} ==Profile Editing== In addition to registering computers, students can modify their contact information and where their computers are located. {| |[[Image:ResNet-ProfileEditMenu.png|thumb|center|350px|A simple menu asks students what they want to modify]] |[[Image:ResNet-Move1.png|thumb|center|350px|Students select which hall they are moving to as well as which computers they are moving]] |- |[[Image:ResNet-Move2.png|thumb|center|350px|Students select the room and port that each computer is being moved into]] |[[Image:ResNet-MoveFinished.png|thumb|center|350px|When the wizard completes successfully, the student is notified with this page]] |- |[[Image:ResNet-ErrorHandling.png|thumb|center|350px|When errors occur, such as when the switch's NVRAM could not be saved, administrators are notified via email, and the student sees a page such as the one above]] |} ==Contact Residence Hall Computer Consultant (RCC)== [[Image:ResNet-ContactRCC.png|thumb|center|350px|]] ==Port Editing== {| |[[Image:ResNet-PortGroup.png|thumb|center|350px|]] |[[Image:ResNet-Ports.png|thumb|center|350px|]] |- |[[Image:ResNet-PortStack.png|thumb|center|350px|]] |} ==Frequently Asked Questions== [[Image:ResNet-SOCKS.png|thumb|center|350px|]] ==Museum== [[Image:ResNet-Museum.png|thumb|center|350px|]] ==DialPad Status== [[Image:ResNet-Dialpad.png|thumb|center|350px|]] ==Network Traffic Graphs== [[Image:ResNet-MRTG.png|thumb|center|350px|]] ==Web Proxy Statistics== 80d751bc0df7a3759b7f68e82f8d1825af9db8b3 2094 2093 2007-10-28T01:49:36Z Stevenlawrance 1 /* Contact Residence Hall Computer Consultant (RCC) */ wikitext text/x-wiki [[Image:ResNet-Login.png|thumb|right|350px|ResNet Online's login page, which directs the user to log in using their email username and password]] ResNet Online was [http://www.bryant.edu/ Bryant University's] network registration and information site for computers in the university's residence halls. It has since been superseded by wireless networking and other computer information tracking mechanisms. ==Motivation== While I was a junior at Bryant University, I sought to substantially improve the residence hall computer registration process. Previously, registration was a manual process that could take as long as three weeks between the time a student registers a computer and the time that the student's port is enabled. At the end of the Summer of 1999, I designed and implemented an automated process to handle residence hall computer registrations, making the process on-demand for students. My position as a residence hall computer consultant at the university enabled this to happen as I already knew the relevant contacts to make the system official. At the beginning of the Fall semester of 1999, students were able to quickly enable their residence hall Ethernet ports, and the system properly handled the load without failing. In addition to the registration process, ResNet Online included the following features: *Computer moving wizard *Student profile update page *Integration with Bryant University's [https://www.moonlightdesign.org/dirlist/ DirList2] student database to automatically retrieve student names, email addresses, and phone numbers, simplifying data entry for students *FTP-based authentication against Bryant University's IRIX sever for logins *Frequently asked questions that linked to each other using a simplified syntax similar to modern wiki software *Administrative Ethernet port management that used asynchronous communication with the web server to enable and disable ports. This was years before XMLHttpRequest existed and AJAX was a buzzword **This was accomplished by communicating with the server by changing the image location of a progress bar to include the commands and the percentage to display in the URL's query parameters. The PHP script on the server enabled or disabled the requested ports and returned an image of the progress bar. If an error occurred, a HTTP error was returned. JavaScript on the client side handled success and error scenarios *Wizards persisted the data entered thus far into a PHPLib session, enabling students to complete a wizard between several sessions without having to re-enter any information during subsequent sessions *Traffic graphs from the multi-router traffic grapher (MRTG) *Squid proxy server statistics using a customized version of Prostat **I customized Prostat to retain its state into a file so that subsequent runs do not need to re-parse the log file parts that the previous run had processed. This substantially increased Prostat's summarization performance as I had it automatically run every 5 minutes for up-to-date statistics *[http://en.wikipedia.org/wiki/Yahoo%21_Voice DialPad] proxy status information for the underlying DialPad proxy that I had set up using [http://sovereignit.com/linux2.2/docs/ipmasqadm.man.txt ipmasqadm autofw] Please feel free to see the above capabilities in action through the screen shots below. ==Port Registration Wizard== When a student logs in, they are asked to select their hall and register their computer through the following sequence of pages. Students do not need to enter all information in one session; a PHPLib session stored any entered information until it was committed to the main database at the end of the wizard. The flow of the wizard largely reveals the database table relationships in ResNet's normalized MySQL database. {| |[[Image:ResNet-HallSelection.png|thumb|center|350px|Before the wizard begins, students are asked to select their residence hall from an image map. Bryant University has since added several new buildings, making this a historical photograph]] |[[Image:ResNet-Wizard1.png|thumb|center|350px|Students are asked for their identifying information. If their information was publicly visible in the [https://www.moonlightdesign.org/dirlist/ DirList database], most fields were pre-populated to reduce the amount of data entry required]] |- |[[Image:ResNet-Wizard2.png|thumb|center|350px|The pre-release version initially asked for the number of computers to register, but it was decided that the wizard should be limited to just one computer per registration in the first release]] |[[Image:ResNet-Wizard3.png|thumb|center|350px|Students are asked for the number of operating systems and virus scanners on their computer. Similar to computer counts, network card counts were locked to one for the final release]] |- |[[Image:ResNet-Wizard4.png|thumb|center|350px|Students are asked for their network card and virus scanner information. ResNet Online had a database table with a long list of all virus scanners that I could find at the time on Google. The data model allowed students to register computers in other residence halls, though this capability was likely not needed. Instructions for obtaining a [http://en.wikipedia.org/wiki/Media_Access_Control media access control (MAC) address] were written for all major operating systems, including [http://en.wikipedia.org/wiki/Red_Hat_Linux RedHat Linux]]] |[[Image:ResNet-Wizard5.png|thumb|center|350px|In this final step, students were asked for the wall network port that they plugged their computer into. Some residence halls had stickers with long strings of letters and numbers that did not match the example, so I created a client-side JavaScript-based port wizard that asks for that string along with which side they are plugging into (left or right), and the port wizard then automatically selected the appropriate port from the drop-down list from that information]] |- |[[Image:ResNet-WizardComplete.png|thumb|center|350px|After the port is activated, the data is committed to the database, and the student is notified. Behind the scenes, this process turned on the port using SNMP and saved the Cisco switch's NVRAM using a quick telnet session]] |} ==Profile Editing== In addition to registering computers, students can modify their contact information and where their computers are located. {| |[[Image:ResNet-ProfileEditMenu.png|thumb|center|350px|A simple menu asks students what they want to modify]] |[[Image:ResNet-Move1.png|thumb|center|350px|Students select which hall they are moving to as well as which computers they are moving]] |- |[[Image:ResNet-Move2.png|thumb|center|350px|Students select the room and port that each computer is being moved into]] |[[Image:ResNet-MoveFinished.png|thumb|center|350px|When the wizard completes successfully, the student is notified with this page]] |- |[[Image:ResNet-ErrorHandling.png|thumb|center|350px|When errors occur, such as when the switch's NVRAM could not be saved, administrators are notified via email, and the student sees a page such as the one above]] |} ==Contact Residence Hall Computer Consultant== Students can easily contact a residence hall computer consultant (RCC) for network and computer related questions. ResNet Online had a database table that contained information about which students are RCCs for each hall. Because a student's registration knows which hall they live in, requests for help were routed to the proper RCC or RCCs. {| |[[Image:ResNet-ContactRCC.png|thumb|center|350px|RCC contact form]] |} ==Port Editing== {| |[[Image:ResNet-PortGroup.png|thumb|center|350px|]] |[[Image:ResNet-Ports.png|thumb|center|350px|]] |- |[[Image:ResNet-PortStack.png|thumb|center|350px|]] |} ==Frequently Asked Questions== [[Image:ResNet-SOCKS.png|thumb|center|350px|]] ==Museum== [[Image:ResNet-Museum.png|thumb|center|350px|]] ==DialPad Status== [[Image:ResNet-Dialpad.png|thumb|center|350px|]] ==Network Traffic Graphs== [[Image:ResNet-MRTG.png|thumb|center|350px|]] ==Web Proxy Statistics== 8c970110933a63411e839403504d2efc87ceb5b5 2095 2094 2007-10-28T02:39:18Z Stevenlawrance 1 /* Port Editing */ wikitext text/x-wiki [[Image:ResNet-Login.png|thumb|right|350px|ResNet Online's login page, which directs the user to log in using their email username and password]] ResNet Online was [http://www.bryant.edu/ Bryant University's] network registration and information site for computers in the university's residence halls. It has since been superseded by wireless networking and other computer information tracking mechanisms. ==Motivation== While I was a junior at Bryant University, I sought to substantially improve the residence hall computer registration process. Previously, registration was a manual process that could take as long as three weeks between the time a student registers a computer and the time that the student's port is enabled. At the end of the Summer of 1999, I designed and implemented an automated process to handle residence hall computer registrations, making the process on-demand for students. My position as a residence hall computer consultant at the university enabled this to happen as I already knew the relevant contacts to make the system official. At the beginning of the Fall semester of 1999, students were able to quickly enable their residence hall Ethernet ports, and the system properly handled the load without failing. In addition to the registration process, ResNet Online included the following features: *Computer moving wizard *Student profile update page *Integration with Bryant University's [https://www.moonlightdesign.org/dirlist/ DirList2] student database to automatically retrieve student names, email addresses, and phone numbers, simplifying data entry for students *FTP-based authentication against Bryant University's IRIX sever for logins *Frequently asked questions that linked to each other using a simplified syntax similar to modern wiki software *Administrative Ethernet port management that used asynchronous communication with the web server to enable and disable ports. This was years before XMLHttpRequest existed and AJAX was a buzzword **This was accomplished by communicating with the server by changing the image location of a progress bar to include the commands and the percentage to display in the URL's query parameters. The PHP script on the server enabled or disabled the requested ports and returned an image of the progress bar. If an error occurred, a HTTP error was returned. JavaScript on the client side handled success and error scenarios *Wizards persisted the data entered thus far into a PHPLib session, enabling students to complete a wizard between several sessions without having to re-enter any information during subsequent sessions *Traffic graphs from the multi-router traffic grapher (MRTG) *Squid proxy server statistics using a customized version of Prostat **I customized Prostat to retain its state into a file so that subsequent runs do not need to re-parse the log file parts that the previous run had processed. This substantially increased Prostat's summarization performance as I had it automatically run every 5 minutes for up-to-date statistics *[http://en.wikipedia.org/wiki/Yahoo%21_Voice DialPad] proxy status information for the underlying DialPad proxy that I had set up using [http://sovereignit.com/linux2.2/docs/ipmasqadm.man.txt ipmasqadm autofw] Please feel free to see the above capabilities in action through the screen shots below. ==Port Registration Wizard== When a student logs in, they are asked to select their hall and register their computer through the following sequence of pages. Students do not need to enter all information in one session; a PHPLib session stored any entered information until it was committed to the main database at the end of the wizard. The flow of the wizard largely reveals the database table relationships in ResNet's normalized MySQL database. {| |[[Image:ResNet-HallSelection.png|thumb|center|350px|Before the wizard begins, students are asked to select their residence hall from an image map. Bryant University has since added several new buildings, making this a historical photograph]] |[[Image:ResNet-Wizard1.png|thumb|center|350px|Students are asked for their identifying information. If their information was publicly visible in the [https://www.moonlightdesign.org/dirlist/ DirList database], most fields were pre-populated to reduce the amount of data entry required]] |- |[[Image:ResNet-Wizard2.png|thumb|center|350px|The pre-release version initially asked for the number of computers to register, but it was decided that the wizard should be limited to just one computer per registration in the first release]] |[[Image:ResNet-Wizard3.png|thumb|center|350px|Students are asked for the number of operating systems and virus scanners on their computer. Similar to computer counts, network card counts were locked to one for the final release]] |- |[[Image:ResNet-Wizard4.png|thumb|center|350px|Students are asked for their network card and virus scanner information. ResNet Online had a database table with a long list of all virus scanners that I could find at the time on Google. The data model allowed students to register computers in other residence halls, though this capability was likely not needed. Instructions for obtaining a [http://en.wikipedia.org/wiki/Media_Access_Control media access control (MAC) address] were written for all major operating systems, including [http://en.wikipedia.org/wiki/Red_Hat_Linux RedHat Linux]]] |[[Image:ResNet-Wizard5.png|thumb|center|350px|In this final step, students were asked for the wall network port that they plugged their computer into. Some residence halls had stickers with long strings of letters and numbers that did not match the example, so I created a client-side JavaScript-based port wizard that asks for that string along with which side they are plugging into (left or right), and the port wizard then automatically selected the appropriate port from the drop-down list from that information]] |- |[[Image:ResNet-WizardComplete.png|thumb|center|350px|After the port is activated, the data is committed to the database, and the student is notified. Behind the scenes, this process turned on the port using SNMP and saved the Cisco switch's NVRAM using a quick telnet session]] |} ==Profile Editing== In addition to registering computers, students can modify their contact information and where their computers are located. {| |[[Image:ResNet-ProfileEditMenu.png|thumb|center|350px|A simple menu asks students what they want to modify]] |[[Image:ResNet-Move1.png|thumb|center|350px|Students select which hall they are moving to as well as which computers they are moving]] |- |[[Image:ResNet-Move2.png|thumb|center|350px|Students select the room and port that each computer is being moved into]] |[[Image:ResNet-MoveFinished.png|thumb|center|350px|When the wizard completes successfully, the student is notified with this page]] |- |[[Image:ResNet-ErrorHandling.png|thumb|center|350px|When errors occur, such as when the switch's NVRAM could not be saved, administrators are notified via email, and the student sees a page such as the one above]] |} ==Contact Residence Hall Computer Consultant== Students can easily contact a residence hall computer consultant (RCC) for network and computer related questions. ResNet Online had a database table that contained information about which students are RCCs for each hall. Because a student's registration knows which hall they live in, requests for help were routed to the proper RCC or RCCs. {| |[[Image:ResNet-ContactRCC.png|thumb|center|350px|RCC contact form]] |} ==Port Editing== {| |rowspan="2" valign="top"|[[Image:ResNet-Ports.png|thumb|center|350px|]] |valign="top"|[[Image:ResNet-PortGroup.png|thumb|center|350px|]] |- |valign="top"|[[Image:ResNet-PortStack.png|thumb|center|350px|]] |} ==Frequently Asked Questions== [[Image:ResNet-SOCKS.png|thumb|center|350px|]] ==Museum== [[Image:ResNet-Museum.png|thumb|center|350px|]] ==DialPad Status== [[Image:ResNet-Dialpad.png|thumb|center|350px|]] ==Network Traffic Graphs== [[Image:ResNet-MRTG.png|thumb|center|350px|]] ==Web Proxy Statistics== 3c8a8bd1db721250571e0e1d375a8f35656f85ea LPD 0 1604 2087 2044 2007-10-24T15:45:07Z Stevenlawrance 1 wikitext text/x-wiki [[Image:LpdServerConfig.png|frame|right|The LPD Printer System's configuration dialog box, which configures printer queues for the underlying LPD server and the PCL interpreter's settings]] [[Image:Program-lpd3.png|frame|right|The data flow architecture diagram of how the LPD Printer System for Win95 gets data to the printer]] The LPD Printer System for Win95 is a {{Tech:Win32}} extension of the [http://www.uv.es/~webuv/ingles/index.htm University of Valencia] student Agustin Lopez Bueno's {{Tech:Win16}} [http://en.wikipedia.org/wiki/Line_Printer_Daemon_protocol LPD] [http://ftp.man.poznan.pl/winsock-l/printing/prsrv11.txt Server program]. This extension added support for [http://en.wikipedia.org/wiki/Windows_95 Windows 95] printing by rendering Hewlett Packard [http://en.wikipedia.org/wiki/Printer_Command_Language printer command language (PCL)] input onto a printer [http://en.wikipedia.org/wiki/Graphics_Device_Interface graphics device interface (GDI)] context, permitting LPD clients to print to any arbitrary destination printer that has a {{Tech:Win32}} driver. I wrote this extension to effectively save the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] thousands of dollars in their Windows 95 upgrade as this program eliminated the need to license [http://www.netmanage.com/products/rumba/index.asp WallData Rumba] for [http://en.wikipedia.org/wiki/AS/400 AS/400] printer support. IBM's [http://www.google.com/search?q=client+access%2F400 Client Access/400] for Windows 95 provided terminal access, but not local printer access. The GCISD widely deployed PCL Page in its administrative offices for AS/400-to-PC printing. This print system extends the original Win16 program by using Windows's [http://en.wikipedia.org/wiki/Hooking hook] API to override the "Setup" button to invoke my {{Tech:Win32}}-based configuration program, which configures the LPD server to hand off incoming print jobs to pasprn32.exe. My pasprn32.exe program performed the PCL interpretation and printer GDI context printing. Interestingly, this strategy uncovered a difference between Windows 95 and [http://en.wikipedia.org/wiki/Windows_nt Windows NT]. In Windows NT and higher, the "Setup" button hook successfully launches my configuration program, but it fails to stop the LPD server from displaying its own configuration dialog box, which was properly suppressed in Windows 95. With logging, it's possible to keep track of the print jobs to quickly diagnose any problems that might arise with LPD printing. At the user's option, word wrapping may be enabled or disabled, among other options. This system supports up to twenty printer queues on one computer, permitting customization of font and print settings for different programs on a AS/400 or UNIX host without having to manually switch between settings on the client for different types of print jobs. It's also possible to have one computer running this system handle printing for up to twenty different printers that are either physically attached or on another computer across the network. Because some of the components of this program were created while I was employed at the Grapevine-Colleyville ISD and the [http://ftp.man.poznan.pl/winsock-l/printing/prsrv11.zip original program] is restricted for academic and educational use only, I cannot redistribute this program without permission. Fortunately, free alternatives exist in the marketplace. [[Image:LpdServer.png|frame|none|The underlying {{Tech:Win16}}-based LPD server, which was written by [http://www.uv.es/~webuv/ingles/index.htm University of Valencia] student Agustin Lopez Bueno]. I extended it using Windows's hook API]] 7390c367085faa735aef4d1bd3abb8d00c130bae 2088 2087 2007-10-24T15:45:29Z Stevenlawrance 1 wikitext text/x-wiki [[Image:LpdServerConfig.png|frame|right|The LPD Printer System's configuration dialog box, which configures printer queues for the underlying LPD server and the PCL interpreter's settings]] [[Image:Program-lpd3.png|frame|right|The data flow architecture diagram of how the LPD Printer System for Win95 gets data to the printer]] The LPD Printer System for Win95 is a {{Tech:Win32}} extension of the [http://www.uv.es/~webuv/ingles/index.htm University of Valencia] student Agustin Lopez Bueno's {{Tech:Win16}} [http://en.wikipedia.org/wiki/Line_Printer_Daemon_protocol LPD] [http://ftp.man.poznan.pl/winsock-l/printing/prsrv11.txt Server program]. This extension added support for [http://en.wikipedia.org/wiki/Windows_95 Windows 95] printing by rendering Hewlett Packard [http://en.wikipedia.org/wiki/Printer_Command_Language printer command language (PCL)] input onto a printer [http://en.wikipedia.org/wiki/Graphics_Device_Interface graphics device interface (GDI)] context, permitting LPD clients to print to any arbitrary destination printer that has a {{Tech:Win32}} driver. I wrote this extension to effectively save the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] thousands of dollars in their Windows 95 upgrade as this program eliminated the need to license [http://www.netmanage.com/products/rumba/index.asp WallData Rumba] for [http://en.wikipedia.org/wiki/AS/400 AS/400] printer support. IBM's [http://www.google.com/search?q=client+access%2F400 Client Access/400] for Windows 95 provided terminal access, but not local printer access. The GCISD widely deployed PCL Page in its administrative offices for AS/400-to-PC printing. This print system extends the original Win16 program by using Windows's [http://en.wikipedia.org/wiki/Hooking hook] API to override the "Setup" button to invoke my {{Tech:Win32}}-based configuration program, which configures the LPD server to hand off incoming print jobs to pasprn32.exe. My pasprn32.exe program performed the PCL interpretation and printer GDI context printing. Interestingly, this strategy uncovered a difference between Windows 95 and [http://en.wikipedia.org/wiki/Windows_nt Windows NT]. In Windows NT and higher, the "Setup" button hook successfully launches my configuration program, but it fails to stop the LPD server from displaying its own configuration dialog box, which was properly suppressed in Windows 95. With logging, it's possible to keep track of the print jobs to quickly diagnose any problems that might arise with LPD printing. At the user's option, word wrapping may be enabled or disabled, among other options. This system supports up to twenty printer queues on one computer, permitting customization of font and print settings for different programs on a AS/400 or UNIX host without having to manually switch between settings on the client for different types of print jobs. It's also possible to have one computer running this system handle printing for up to twenty different printers that are either physically attached or on another computer across the network. Because some of the components of this program were created while I was employed at the Grapevine-Colleyville ISD and the [http://ftp.man.poznan.pl/winsock-l/printing/prsrv11.zip original program] is restricted for academic and educational use only, I cannot redistribute this program without permission. Fortunately, free alternatives exist in the marketplace. [[Image:LpdServer.png|frame|none|The underlying {{Tech:Win16}}-based LPD server, which was written by [http://www.uv.es/~webuv/ingles/index.htm University of Valencia] student Agustin Lopez Bueno. I extended it using Windows's hook API]] cdd422ca806c62d153006a4f35e145b6f10d3ebe File:ResNet-Login.png 6 1648 2090 2007-10-28T00:52:54Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 PortProxy 0 1622 2107 2026 2008-05-11T06:12:02Z Stevenlawrance 1 wikitext text/x-wiki [[Image:PortProxy.png|frame|right|PortProxy 95 -- the Windows 95 version -- running in the system tray using [http://en.wikipedia.org/wiki/Wine_%28software%29 Wine] on [http://www.opensuse.org/ Novell openSUSE 10.2]. PortProxy is the icon closest to the right, next to the clock]] PortProxy is a [http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto [[ResNet Online|resnet.bryant.edu]], I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/portproxy.zip Download PortProxy NT, PortProxy 95, and the source code]''' ==Configuration== PortProxy stores its configuration in the <code>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PortProxy\Parameters</code> [http://en.wikipedia.org/wiki/Windows_Registry registry] key. It can be dynamically configured using a command line interface via a localhost [http://en.wikipedia.org/wiki/Telnet telnet] connection to port 256. When connected to the configuration command line interface, the following commands can be used. Each command is terminated with a newline character. Responses from the server begin with either a plus sign (+) for a positive response or a minus sign (-) for a negative response, similar to [https://www.moonlightdesign.org/dirlist/ DirList Server's] protocol. {|class="sortable" border="1" !Command !Parameters !Meaning |- | + |port intaddr intport 6 |Adds a forwarded port *port: The local port that you want PortProxy to listen on *intaddr: The internal IPv4 address that you want PortProxy to connect to when new connections on the local listening port are established *intport: The port number on the internal address that you want PortProxy to connect to when new connections on the local listening port are established *6: This is the internet protocol type. The number six is the constant for TCP. UDP is not supported, though code for it exists as I was trying to make it work |- | - |port |Removes a forwarded port *port: The local port to remove that PortProxy is listening on |- |s |port |Returns whether or not the given local port is being forwarded by PortProxy *port: The local port to examine |- |t |port |Tests a local port for use by PortProxy or another application *port: The local port to examine |- |x | |Closes PortProxy |- |n | |No operation ([http://en.wikipedia.org/wiki/No-op no-op]) |} 34048af3c644e23674bcec078b448ba2eb1852d2 Steven Lawrance 0 1409 2108 2106 2008-05-11T06:22:21Z Stevenlawrance 1 /* [http://www.salesforce.com/ Salesforce.com] */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> Note that some content has not been written yet, and missing parts will be filled in before the end of 2007. Please feel free to ask me for more information about any project. ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff - Quality''' *January 2007 to present *'''Accomplishments''' **Built the security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls partner access controls] **Tracked down and, in many cases, fixed difficult threading and cache related bugs **Championed an improvement to an anti-phishing feature's design successfully **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL) **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/sforce50/sforce_API_calls_SOQL.html sforce object query language (SOQL)] ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 0704b8666b6131b41a55371d9039cc437d65e9bc 2109 2108 2008-05-11T06:24:19Z Stevenlawrance 1 /* [http://www.salesforce.com/ Salesforce.com] */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> Note that some content has not been written yet, and missing parts will be filled in before the end of 2007. Please feel free to ask me for more information about any project. ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff - Quality''' *January 2007 to present *'''Accomplishments''' **Built the security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls partner access controls] **Tracked down and, in many cases, fixed difficult threading and cache related bugs **Championed an improvement to an anti-phishing feature's design successfully **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL) **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm sforce object query language (SOQL)] ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] da1001a9a94b3d1aaac0e2e95e9ebafc8601bc04 2110 2109 2008-05-11T06:24:51Z Stevenlawrance 1 /* [http://www.salesforce.com/ Salesforce.com] */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> Note that some content has not been written yet, and missing parts will be filled in before the end of 2007. Please feel free to ask me for more information about any project. ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff - Quality''' *January 2007 to present *'''Accomplishments''' **Built the security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls partner access controls] **Tracked down and, in many cases, fixed difficult threading and cache related bugs **Championed an improvement to an anti-phishing feature's design successfully **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL) **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] a6d78d262344c99ee5736d03cc42460c0b653232 2111 2110 2008-05-11T06:25:59Z Stevenlawrance 1 /* [http://www.salesforce.com/ Salesforce.com] */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> Note that some content has not been written yet, and missing parts will be filled in before the end of 2007. Please feel free to ask me for more information about any project. ==Interests== These areas all share a common theme of putting software to work for you, regardless of the underlying technology. For me, computing solutions are not about the technology; they are about what the technology can do for you. {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |- |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |- |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |- |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff - Quality, Security Team''' *January 2007 to present *'''Accomplishments''' **Built the security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls partner access controls] **Tracked down and, in many cases, fixed difficult threading and cache related bugs **Championed an improvement to an anti-phishing feature's design successfully **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL) **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] fdf4d6265627a56d557a6f926d698ae0b51203e2 2113 2111 2008-07-03T03:10:17Z Stevenlawrance 1 wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> Note that some content has not been written yet, and missing parts will be filled in before the end of 2007. Please feel free to ask me for more information about any project. ==Interests== My software interests are presently in the following areas: {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Software as a Service (SaaS)</h3> *Salesforce.com and the Force.com platform |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |- |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |- |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |- |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |- |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff - Quality, Security Team''' *January 2007 to present *'''Accomplishments''' **Built the security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls partner access controls] **Tracked down and, in many cases, fixed difficult threading and cache related bugs **Championed an improvement to an anti-phishing feature's design successfully **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL) **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 0227d60f570b146c51a4843c76690a3c2250a40a 2114 2113 2008-07-03T03:10:48Z Stevenlawrance 1 wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> Note that some content has not been written yet, and missing parts will be filled in before the end of 2008. Please feel free to ask me for more information about any project. ==Interests== My software interests are presently in the following areas: {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Software as a Service (SaaS)</h3> *Salesforce.com and the Force.com platform |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |- |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |- |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |- |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |- |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff - Quality, Security Team''' *January 2007 to present *'''Accomplishments''' **Built the security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls partner access controls] **Tracked down and, in many cases, fixed difficult threading and cache related bugs **Championed an improvement to an anti-phishing feature's design successfully **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL) **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] b131fc560a4ac3468d549d0e9d20529e60bc6dbf 2118 2114 2008-08-17T00:41:07Z Stevenlawrance 1 /* Team software */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> Note that some content has not been written yet, and missing parts will be filled in before the end of 2008. Please feel free to ask me for more information about any project. ==Interests== My software interests are presently in the following areas: {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Software as a Service (SaaS)</h3> *Salesforce.com and the Force.com platform |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |- |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |- |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |- |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |- |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007-2008 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff - Quality, Security Team''' *January 2007 to present *'''Accomplishments''' **Built the security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls partner access controls] **Tracked down and, in many cases, fixed difficult threading and cache related bugs **Championed an improvement to an anti-phishing feature's design successfully **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL) **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as President of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 9c1d202b159b46336479b5927ebe5aed7e9cee5d 2119 2118 2008-08-22T02:59:50Z Stevenlawrance 1 /* Bryant University */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> Note that some content has not been written yet, and missing parts will be filled in before the end of 2008. Please feel free to ask me for more information about any project. ==Interests== My software interests are presently in the following areas: {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Software as a Service (SaaS)</h3> *Salesforce.com and the Force.com platform |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |- |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |- |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |- |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |- |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[http://www.salesforce.com/ Salesforce.com]||Built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:C Sharp}}, {{Tech:Mono}}, {{Tech:NUnit}}|| ||2007-2008 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}|| ||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}|| ||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| || ||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| || ||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| || ||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}|| ||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff - Quality, Security Team''' *January 2007 to present *'''Accomplishments''' **Built the security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls partner access controls] **Tracked down and, in many cases, fixed difficult threading and cache related bugs **Championed an improvement to an anti-phishing feature's design successfully **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL) **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Planning manager, software process manager, project risk manager, technology support manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 65e205aaf3bee2ef54b13b15f311e3fba424b6c0 2127 2119 2008-10-09T13:33:04Z Stevenlawrance 1 wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> Note that some content has not been written yet, and missing parts will be filled in before the end of 2008. Please feel free to ask me for more information about any project. ==Interests== My software interests are presently in the following areas: {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Software as a Service (SaaS)</h3> *Salesforce.com and the Force.com platform |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |- |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |- |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Design and implementation of concurrent software and improving the thread safety of existing software *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |- |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |- |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[http://www.salesforce.com/ Salesforce.com]||Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization, built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}||large||2007-2008 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff - Quality, Security Team''' *January 2007 to present *'''Accomplishments''' **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization **Built the security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls] **Tracked down and, in some cases, fixed difficult threading and cache related bugs **Championed an improvement to an anti-phishing feature's design successfully **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming the go-to person for HTTPS and SSL **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] aca0bc359cc073ea55a0238e01f0bcba7dbbbe50 2128 2127 2008-10-09T13:35:09Z Stevenlawrance 1 wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> Note that some content has not been written yet, and missing parts will be filled in before the end of 2008. Please feel free to ask me for more information about any project. ==Interests== My software interests are presently in the following areas: {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Software as a Service (SaaS)</h3> *{{Tech:Salesforce.com}} platform |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |- |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |- |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Design and implementation of concurrent software and improving the thread safety of existing software *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |- |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |- |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[http://www.salesforce.com/ Salesforce.com]||Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization, built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}||large||2007-2008 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff - Quality, Security Team''' *January 2007 to present *'''Accomplishments''' **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization **Built the security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls] **Tracked down and, in some cases, fixed difficult threading and cache related bugs **Championed an improvement to an anti-phishing feature's design successfully **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming the go-to person for HTTPS and SSL **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 33820c3e3350378bb5040fa751fa9bf300edff04 2129 2128 2008-10-09T14:11:04Z Stevenlawrance 1 /* Salesforce.com */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> Note that some content has not been written yet, and missing parts will be filled in before the end of 2008. Please feel free to ask me for more information about any project. ==Interests== My software interests are presently in the following areas: {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Software as a Service (SaaS)</h3> *{{Tech:Salesforce.com}} platform |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |- |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |- |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Design and implementation of concurrent software and improving the thread safety of existing software *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |- |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |- |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[http://www.salesforce.com/ Salesforce.com]||Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization, built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}||large||2007-2008 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff - Quality, Security Team''' *January 2007 to present *'''Accomplishments''' **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization **Built the security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls] **Tracked down and, in some cases, fixed difficult threading and cache related bugs **Championed an improvement to an anti-phishing feature's design successfully **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming the go-to person for HTTPS and SSL **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 16a19f04987e3bd247123b0a20eccc79eca0fb1e 2130 2129 2008-10-14T05:42:59Z Stevenlawrance 1 wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Resume:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] Note that some content below has not been written yet, and missing parts will be filled in before the end of 2008. Please feel free to ask me for more information about any project. ==Interests== My software interests are presently in the following areas: {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Software as a Service (SaaS)</h3> *{{Tech:Salesforce.com}} platform |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |- |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |- |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Design and implementation of concurrent software and improving the thread safety of existing software *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |- |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |- |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[http://www.salesforce.com/ Salesforce.com]||Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization, built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}||large||2007-2008 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff - Quality, Security Team''' *January 2007 to present *'''Accomplishments''' **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization **Built the security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls] **Tracked down and, in some cases, fixed difficult threading and cache related bugs **Championed an improvement to an anti-phishing feature's design successfully **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming the go-to person for HTTPS and SSL **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 4e0cfba8ff7c7064900939cc06ea71ba3559b589 2131 2130 2008-10-14T14:15:37Z Stevenlawrance 1 wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] Note that some content below has not been written yet, and missing parts will be filled in before the end of 2008. Please feel free to ask me for more information about any project. ==Interests== My software interests are presently in the following areas: {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Software as a Service (SaaS)</h3> *{{Tech:Salesforce.com}} platform |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |- |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |- |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Design and implementation of concurrent software and improving the thread safety of existing software *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |- |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |- |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[http://www.salesforce.com/ Salesforce.com]||Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization, built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}||large||2007-2008 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff - Quality, Security Team''' *January 2007 to present *'''Accomplishments''' **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization **Built the security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls] **Tracked down and, in some cases, fixed difficult threading and cache related bugs **Championed an improvement to an anti-phishing feature's design successfully **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming the go-to person for HTTPS and SSL **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] edb0722b086069ff09afc9f082e6a8fc115f86f3 2132 2131 2008-10-15T03:05:12Z Stevenlawrance 1 /* Software and project contributions */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] Note that some content below has not been written yet, and missing parts will be filled in before the end of 2008. Please feel free to ask me for more information about any project. ==Interests== My software interests are presently in the following areas: {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Software as a Service (SaaS)</h3> *{{Tech:Salesforce.com}} platform |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |- |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |- |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Design and implementation of concurrent software and improving the thread safety of existing software *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |- |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |- |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[http://www.salesforce.com/ Salesforce.com]||Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization, built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}||large||2007-2008 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list]||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff - Quality, Security Team''' *January 2007 to present *'''Accomplishments''' **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization **Built the security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls] **Tracked down and, in some cases, fixed difficult threading and cache related bugs **Championed an improvement to an anti-phishing feature's design successfully **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming the go-to person for HTTPS and SSL **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] f87045a80a35e7a358e0d6ca5a4e4894354862ac 2133 2132 2008-10-15T03:13:26Z Stevenlawrance 1 wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Networks:''' [http://www.linkedin.com/in/meowmeow LinkedIn], [http://www.facebook.com/people/Steven_Lawrance/514293518 Facebook] Note that some content below has not been written yet, and missing parts will be filled in before the end of 2008. Please feel free to ask me for more information about any project. ==Interests== My software interests are presently in the following areas: {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Software as a Service (SaaS)</h3> *{{Tech:Salesforce.com}} platform |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |- |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |- |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Design and implementation of concurrent software and improving the thread safety of existing software *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |- |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |- |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[http://www.salesforce.com/ Salesforce.com]||Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization, built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}||large||2007-2008 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list]||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff - Quality, Security Team''' *January 2007 to present *'''Accomplishments''' **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization **Built the security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls] **Tracked down and, in some cases, fixed difficult threading and cache related bugs **Championed an improvement to an anti-phishing feature's design successfully **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming the go-to person for HTTPS and SSL **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 081b717aaed4d56cc7f905de9e00fe1e38656958 2140 2133 2008-12-13T05:54:16Z Stevenlawrance 1 /* Interests */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Networks:''' [http://www.linkedin.com/in/meowmeow LinkedIn], [http://www.facebook.com/people/Steven_Lawrance/514293518 Facebook] Note that some content below has not been written yet, and missing parts will be filled in before the end of 2008. Please feel free to ask me for more information about any project. ==Interests== My software interests are presently in the following areas: {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Software as a Service (SaaS)</h3> *{{Tech:Salesforce.com}} platform |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[CompactOnDelete]] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |- |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |- |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Design and implementation of concurrent software and improving the thread safety of existing software *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |- |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |- |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007 |- |[http://www.salesforce.com/ Salesforce.com]||Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization, built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}||large||2007-2008 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list]||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff - Quality, Security Team''' *January 2007 to present *'''Accomplishments''' **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization **Built the security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls] **Tracked down and, in some cases, fixed difficult threading and cache related bugs **Championed an improvement to an anti-phishing feature's design successfully **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming the go-to person for HTTPS and SSL **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 6d7bed83528b5764cad510d43286d31535637eb5 2147 2140 2009-01-04T19:30:39Z Stevenlawrance 1 wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Networks:''' [http://www.linkedin.com/in/meowmeow LinkedIn], [http://www.facebook.com/people/Steven_Lawrance/514293518 Facebook] Note that some content below has not been written yet, and missing parts will be filled in before the end of 2008. Please feel free to ask me for more information about any project. ==Interests== My software interests are presently in the following areas: {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Software as a Service (SaaS)</h3> *{{Tech:Salesforce.com}} platform |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[CompactOnDelete]] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |- |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |- |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Design and implementation of concurrent software and improving the thread safety of existing software *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |- |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |- |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[http://www.salesforce.com/ Salesforce.com]||Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization, built a security testing framework for a new feature, enhanced an internal testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}||large||2007-2008 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction; it was on a hiatus for most of its first two years||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list]||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff - Quality, Security Team''' *January 2007 to present *'''Accomplishments''' **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization **Built the security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls] **Tracked down and, in some cases, fixed difficult threading and cache related bugs **Championed an improvement to an anti-phishing feature's design successfully **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming the go-to person for HTTPS and SSL **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 4864c091034e135e79aa89c4c0ac890548813286 2148 2147 2009-01-04T19:34:47Z Stevenlawrance 1 /* Team software */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Networks:''' [http://www.linkedin.com/in/meowmeow LinkedIn], [http://www.facebook.com/people/Steven_Lawrance/514293518 Facebook] Note that some content below has not been written yet, and missing parts will be filled in before the end of 2008. Please feel free to ask me for more information about any project. ==Interests== My software interests are presently in the following areas: {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Software as a Service (SaaS)</h3> *{{Tech:Salesforce.com}} platform |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[CompactOnDelete]] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |- |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |- |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Design and implementation of concurrent software and improving the thread safety of existing software *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |- |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |- |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.salesforce.com/ Salesforce.com]||Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization, wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests, built the security testing framework for package access controls, enhanced an internal production server testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}||large||2007-2008 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction; it was on a hiatus for most of its first two years||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list]||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff - Quality, Security Team''' *January 2007 to present *'''Accomplishments''' **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization **Built the security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls] **Tracked down and, in some cases, fixed difficult threading and cache related bugs **Championed an improvement to an anti-phishing feature's design successfully **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming the go-to person for HTTPS and SSL **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 8fa82a5aaca381d66f36b8bd1be102c88aaa5f46 2149 2148 2009-01-04T19:36:23Z Stevenlawrance 1 /* Team software */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Networks:''' [http://www.linkedin.com/in/meowmeow LinkedIn], [http://www.facebook.com/people/Steven_Lawrance/514293518 Facebook] Note that some content below has not been written yet, and missing parts will be filled in before the end of 2008. Please feel free to ask me for more information about any project. ==Interests== My software interests are presently in the following areas: {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Software as a Service (SaaS)</h3> *{{Tech:Salesforce.com}} platform |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[CompactOnDelete]] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |- |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |- |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Design and implementation of concurrent software and improving the thread safety of existing software *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |- |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |- |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.salesforce.com/ Salesforce.com]||Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization, wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests, built the security testing framework for package access controls, enhanced an internal production server testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions. I also ensured that the software produced by my teams functioned properly through automated and manual testing||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}||large||2007-2009 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is presently under construction; it was on a hiatus for most of its first two years||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list]||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff - Quality, Security Team''' *January 2007 to present *'''Accomplishments''' **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization **Built the security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls] **Tracked down and, in some cases, fixed difficult threading and cache related bugs **Championed an improvement to an anti-phishing feature's design successfully **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming the go-to person for HTTPS and SSL **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 0b2c4c63979b29ee320d1a8e4da7c91936658465 2153 2149 2009-03-24T11:14:50Z Stevenlawrance 1 wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Networks:''' [http://www.linkedin.com/in/meowmeow LinkedIn], [http://www.facebook.com/people/Steven_Lawrance/514293518 Facebook] Note that some content below has not been written yet, and missing parts will be filled in before the end of 2008. Please feel free to ask me for more information about any project. ==Interests== My software interests are presently in the following areas: {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Software as a Service (SaaS)</h3> *{{Tech:Salesforce.com}} platform |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[CompactOnDelete]] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |- |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |- |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Design and implementation of concurrent software and improving the thread safety of existing software *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |- |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |- |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.salesforce.com/ Salesforce.com]||Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization, wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests, built the security testing framework for package access controls, enhanced an internal production server testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions. I also ensured that the software produced by my teams functioned properly through automated and manual testing||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}||large||2007-2009 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list]||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff - Quality, Security Team''' *January 2007 to present *'''Accomplishments''' **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization **Built the security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls] **Tracked down and, in some cases, fixed difficult threading and cache related bugs **Championed an improvement to an anti-phishing feature's design successfully **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming the go-to person for HTTPS and SSL **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 25339288aea365508cbbbc4e289c2868446871d3 2155 2153 2009-06-13T15:08:10Z Stevenlawrance 1 wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Networks:''' [http://www.linkedin.com/in/meowmeow LinkedIn], [http://www.facebook.com/slawrance Facebook] Note that some content below has not been written yet, and missing parts will be filled in before the end of 2008. Please feel free to ask me for more information about any project. ==Interests== My software interests are presently in the following areas: {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Software as a Service (SaaS)</h3> *{{Tech:Salesforce.com}} platform |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[CompactOnDelete]] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |- |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |- |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Design and implementation of concurrent software and improving the thread safety of existing software *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |- |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |- |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.salesforce.com/ Salesforce.com]||Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization, wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests, built the security testing framework for package access controls, enhanced an internal production server testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions. I also ensured that the software produced by my teams functioned properly through automated and manual testing||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}||large||2007-2009 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list]||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff - Quality, Security Team''' *January 2007 to present *'''Accomplishments''' **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization **Built the security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls] **Tracked down and, in some cases, fixed difficult threading and cache related bugs **Championed an improvement to an anti-phishing feature's design successfully **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming the go-to person for HTTPS and SSL **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] c9e62c4d741318f74b0e616891f8f8af099373c2 2157 2155 2009-07-30T03:10:59Z Stevenlawrance 1 /* Salesforce.com */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Networks:''' [http://www.linkedin.com/in/meowmeow LinkedIn], [http://www.facebook.com/slawrance Facebook] Note that some content below has not been written yet, and missing parts will be filled in before the end of 2008. Please feel free to ask me for more information about any project. ==Interests== My software interests are presently in the following areas: {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Software as a Service (SaaS)</h3> *{{Tech:Salesforce.com}} platform |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[CompactOnDelete]] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |- |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |- |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Design and implementation of concurrent software and improving the thread safety of existing software *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |- |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |- |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.salesforce.com/ Salesforce.com]||Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization, wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests, built the security testing framework for package access controls, enhanced an internal production server testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions. I also ensured that the software produced by my teams functioned properly through automated and manual testing||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}||large||2007-2009 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list]||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: Core Infrastructure, Security, and API Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the XSS tool running. This led to the identification and resolution of a very large number of vulnerabilities, thus making Salesforce.com more secure **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls] **Tracked down and, in some cases, fixed difficult threading and cache related bugs **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming the go-to person for HTTPS and SSL **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 93b582c60a79c28236b21c217eff5d376cdef9c0 2158 2157 2009-07-30T03:12:12Z Stevenlawrance 1 /* Salesforce.com */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Networks:''' [http://www.linkedin.com/in/meowmeow LinkedIn], [http://www.facebook.com/slawrance Facebook] Note that some content below has not been written yet, and missing parts will be filled in before the end of 2008. Please feel free to ask me for more information about any project. ==Interests== My software interests are presently in the following areas: {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Software as a Service (SaaS)</h3> *{{Tech:Salesforce.com}} platform |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[CompactOnDelete]] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |- |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |- |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Design and implementation of concurrent software and improving the thread safety of existing software *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |- |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |- |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.salesforce.com/ Salesforce.com]||Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization, wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests, built the security testing framework for package access controls, enhanced an internal production server testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions. I also ensured that the software produced by my teams functioned properly through automated and manual testing||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}||large||2007-2009 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list]||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: Core Infrastructure, Security, and API Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a very large number of vulnerabilities, thus making Salesforce.com more secure **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls] **Tracked down and, in some cases, fixed difficult threading and cache related bugs **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming the go-to person for HTTPS and SSL **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 908798a988377030d84692cd4e00a24f6f03d33c Main Page 0 1404 2112 2027 2008-06-11T15:56:28Z Stevenlawrance 1 wikitext text/x-wiki {| |valign="top"| Welcome to Moonlight Design -- the personal web site of [[Henry Lamb]] and [[Steven Lawrance]] ==Henry Lamb== [[Henry Lamb]] is a professional [http://en.wikipedia.org/wiki/Restaurant restaurateur] trained in both [http://www.baychef.com/programs/hospitality_and_restaurant.asp restaurant management] and [http://www.baychef.com/programs/culinary_arts.asp culinary arts] at the [http://www.baychef.com/ California Culinary Academy]. For a few years from the late 1990s to the early 2000s, Henry was a [http://en.wikipedia.org/wiki/Graphic_designer graphic designer] trained at the [http://www.artinstitutes.edu/sanfrancisco/ Art Institute of San Francisco] and the [http://www.academyart.edu/ Academy of Art University] Visit Henry's new wine blog: [http://glassofgrape.com/ Glass of Grape] ==Steven Lawrance== [[Steven Lawrance]] is an active practitioner of [http://en.wikipedia.org/wiki/Software_engineering software engineering] and [http://en.wikipedia.org/wiki/Open-source_software open-source software enthusiast] trained in [http://www.mse.cs.cmu.edu/ software engineering] at [http://www.mse.cs.cmu.edu/ Carnegie Mellon University] and [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ business administration] with [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems computer information systems] at [http://www.bryant.edu/ Bryant University] [[Steven Lawrance#Software Project Experience|Check out the list of software that Steve has either written or contributed to]] |valign="top" width="25%"| {|border="1" | <font size="5">[https://www.moonlightdesign.org/urllock/ IE URL Lock]</font> <font size="5">[http://gnucashtoqif.sourceforge.net/ GnuCashToQIF]</font> <font size="5">[https://www.moonlightdesign.org/thunderforce/ Thunderforce]</font> <font size="3">[https://www.moonlightdesign.org/dirlist DirList]</font> <font size="3">[[PortProxy]]</font> <font size="2">[[Serendipity|Team Serendipity]]</font> <font size="2">[[Disk Imager]]</font> <font size="1">[[ScreenWindowX]]</font> <font size="1">[[Personal financial process]]</font> |} <small>[https://www.moonlightdesign.org/wireless/ Guest wireless network sign-up] (local network only)</small> |} 468ff547c07055c7d02fe4c02fd460306fdf6de0 2115 2112 2008-07-06T16:06:45Z Stevenlawrance 1 wikitext text/x-wiki {| |valign="top"| Welcome to Moonlight Design -- the personal web site of [[Henry Lamb]] and [[Steven Lawrance]] ==Henry Lamb== [[Henry Lamb]] is a professional [http://en.wikipedia.org/wiki/Restaurant restaurateur] trained in both [http://www.baychef.com/programs/hospitality_and_restaurant.asp restaurant management] and [http://www.baychef.com/programs/culinary_arts.asp culinary arts] at the [http://www.baychef.com/ California Culinary Academy]. For a few years from the late 1990s to the early 2000s, Henry was a [http://en.wikipedia.org/wiki/Graphic_designer graphic designer] trained at the [http://www.artinstitutes.edu/sanfrancisco/ Art Institute of San Francisco] and the [http://www.academyart.edu/ Academy of Art University] Visit Henry's new wine blog: [http://glassofgrape.com/ Glass of Grape] ==Steven Lawrance== [[Steven Lawrance]] is an active practitioner of [http://en.wikipedia.org/wiki/Software_engineering software engineering] and [http://en.wikipedia.org/wiki/Open-source_software open-source software enthusiast] trained in [http://www.mse.cs.cmu.edu/ software engineering] at [http://www.mse.cs.cmu.edu/ Carnegie Mellon University] and [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ business administration] with [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems computer information systems] at [http://www.bryant.edu/ Bryant University] [[Steven Lawrance#Software Project Experience|Check out the list of software that Steve has either written or contributed to]] |valign="top" width="25%"| {|border="1" | <font size="5">[https://www.moonlightdesign.org/urllock/ IE URL Lock]</font> <font size="5">[http://gnucashtoqif.sourceforge.net/ GnuCashToQIF]</font> <font size="5">[https://www.moonlightdesign.org/thunderforce/ Thunderforce]</font> <font size="3">[https://www.moonlightdesign.org/dirlist DirList]</font> <font size="3">[[PortProxy]]</font> <font size="2">[[Serendipity|Team Serendipity]]</font> <font size="2">[[Disk Imager]]</font> <font size="1">[[ScreenWindowX]]</font> |} <small>[https://www.moonlightdesign.org/wireless/ Guest wireless network sign-up] (local network only)</small> |} b570331da8581ed9dac2bf60a0a2fb2b6ad30ede 2117 2115 2008-07-06T16:18:35Z Stevenlawrance 1 wikitext text/x-wiki {| |valign="top"| Welcome to Moonlight Design -- the personal web site of [[Henry Lamb]] and [[Steven Lawrance]] ==Henry Lamb== [[Henry Lamb]] is a professional [http://en.wikipedia.org/wiki/Restaurant restaurateur] trained in both [http://www.baychef.com/programs/hospitality_and_restaurant.asp restaurant management] and [http://www.baychef.com/programs/culinary_arts.asp culinary arts] at the [http://www.baychef.com/ California Culinary Academy]. For a few years from the late 1990s to the early 2000s, Henry was a [http://en.wikipedia.org/wiki/Graphic_designer graphic designer] trained at the [http://www.artinstitutes.edu/sanfrancisco/ Art Institute of San Francisco] and the [http://www.academyart.edu/ Academy of Art University] Visit Henry's new wine blog: [http://glassofgrape.com/ Glass of Grape] ==Steven Lawrance== [[Steven Lawrance]] is an active practitioner of [http://en.wikipedia.org/wiki/Software_engineering software engineering] and [http://en.wikipedia.org/wiki/Open-source_software open-source software enthusiast] trained in [http://www.mse.cs.cmu.edu/ software engineering] at [http://www.mse.cs.cmu.edu/ Carnegie Mellon University] and [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ business administration] with [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems computer information systems] at [http://www.bryant.edu/ Bryant University] [[Steven Lawrance#Software Project Experience|Check out the list of software that Steve has either written or contributed to]] [http://www.facebook.com/people/Steven_Lawrance/514293518 Steven's Facebook profile] |valign="top" width="25%"| {|border="1" | <font size="5">[https://www.moonlightdesign.org/urllock/ IE URL Lock]</font> <font size="5">[http://gnucashtoqif.sourceforge.net/ GnuCashToQIF]</font> <font size="5">[https://www.moonlightdesign.org/thunderforce/ Thunderforce]</font> <font size="3">[https://www.moonlightdesign.org/dirlist DirList]</font> <font size="3">[[PortProxy]]</font> <font size="2">[[Serendipity|Team Serendipity]]</font> <font size="2">[[Disk Imager]]</font> <font size="1">[[ScreenWindowX]]</font> |} <small>[https://www.moonlightdesign.org/wireless/ Guest wireless network sign-up] (local network only)</small> |} d26f708535b2e1b4775bade3224cc9bf87d7d464 2120 2117 2008-10-03T06:19:26Z Stevenlawrance 1 wikitext text/x-wiki {| |valign="top"| Welcome to Moonlight Design -- the personal web site of [[Henry Lamb]] and [[Steven Lawrance]] ==Henry Lamb== [[Henry Lamb]] is a professional [http://en.wikipedia.org/wiki/Restaurant restaurateur] trained in both [http://www.baychef.com/programs/hospitality_and_restaurant.asp restaurant management] and [http://www.baychef.com/programs/culinary_arts.asp culinary arts] at the [http://www.baychef.com/ California Culinary Academy]. For a few years from the late 1990s to the early 2000s, Henry was a [http://en.wikipedia.org/wiki/Graphic_designer graphic designer] trained at the [http://www.artinstitutes.edu/sanfrancisco/ Art Institute of San Francisco] and the [http://www.academyart.edu/ Academy of Art University] Visit Henry's new wine site: [http://glassofgrape.com/ Glass of Grape] ==Steven Lawrance== [[Steven Lawrance]] is an active practitioner of [http://en.wikipedia.org/wiki/Software_engineering software engineering] and [http://en.wikipedia.org/wiki/Open-source_software open-source software enthusiast] trained in [http://www.mse.cs.cmu.edu/ software engineering] at [http://www.mse.cs.cmu.edu/ Carnegie Mellon University] and [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ business administration] with [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems computer information systems] at [http://www.bryant.edu/ Bryant University] [[Steven Lawrance#Software Project Experience|Check out the list of software that Steve has either written or contributed to]] [http://www.facebook.com/people/Steven_Lawrance/514293518 Steven's Facebook profile] |valign="top" width="25%"| {|border="1" | <font size="5">[https://www.moonlightdesign.org/urllock/ IE URL Lock]</font> <font size="5">[http://gnucashtoqif.sourceforge.net/ GnuCashToQIF]</font> <font size="5">[https://www.moonlightdesign.org/thunderforce/ Thunderforce]</font> <font size="3">[https://www.moonlightdesign.org/dirlist DirList]</font> <font size="3">[[PortProxy]]</font> <font size="2">[[Serendipity|Team Serendipity]]</font> <font size="2">[[Disk Imager]]</font> <font size="1">[[ScreenWindowX]]</font> |} <small>[https://www.moonlightdesign.org/wireless/ Guest wireless network sign-up] (local network only)</small> |} b0be45e4cfc3fbc26ac2f7950bdbeec0cb55a5b9 2136 2120 2008-12-11T15:49:48Z Stevenlawrance 1 wikitext text/x-wiki {| |valign="top"| Welcome to Moonlight Design -- the personal web site of [[Henry Lamb]] and [[Steven Lawrance]] ==Henry Lamb== [[Henry Lamb]] is a professional [http://en.wikipedia.org/wiki/Restaurant restaurateur] trained in both [http://www.baychef.com/programs/hospitality_and_restaurant.asp restaurant management] and [http://www.baychef.com/programs/culinary_arts.asp culinary arts] at the [http://www.baychef.com/ California Culinary Academy]. For a few years from the late 1990s to the early 2000s, Henry was a [http://en.wikipedia.org/wiki/Graphic_designer graphic designer] trained at the [http://www.artinstitutes.edu/sanfrancisco/ Art Institute of San Francisco] and the [http://www.academyart.edu/ Academy of Art University] Visit Henry's new wine site: [http://glassofgrape.com/ Glass of Grape] ==Steven Lawrance== [[Steven Lawrance]] is an active practitioner of [http://en.wikipedia.org/wiki/Software_engineering software engineering] and [http://en.wikipedia.org/wiki/Open-source_software open-source software enthusiast] trained in [http://www.mse.cs.cmu.edu/ software engineering] at [http://www.mse.cs.cmu.edu/ Carnegie Mellon University] and [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ business administration] with [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems computer information systems] at [http://www.bryant.edu/ Bryant University] [[Steven Lawrance#Software Project Experience|Check out the list of software that Steve has either written or contributed to]] [http://www.facebook.com/people/Steven_Lawrance/514293518 Steven's Facebook profile] |valign="top" width="25%"| {|border="1" | <font size="5">[https://www.moonlightdesign.org/urllock/ IE URL Lock]</font> <font size="5">[http://gnucashtoqif.sourceforge.net/ GnuCashToQIF]</font> <font size="5">[https://www.moonlightdesign.org/thunderforce/ Thunderforce]</font> <font size="3">[https://www.moonlightdesign.org/dirlist DirList] [[CompactOnDelete]]</font> <font size="3">[[PortProxy]]</font> <font size="2">[[Serendipity|Team Serendipity]]</font> <font size="2">[[Disk Imager]]</font> <font size="1">[[ScreenWindowX]]</font> |} <small>[https://www.moonlightdesign.org/wireless/ Guest wireless network sign-up] (local network only)</small> |} e8e294935f56c52f8ef8a6f641f396eb519e4807 2152 2136 2009-03-24T11:13:19Z Stevenlawrance 1 wikitext text/x-wiki {| |valign="top"| Welcome to Moonlight Design -- the personal web site of [[Henry Lamb]] and [[Steven Lawrance]] ==Henry Lamb== [[Henry Lamb]] is a professional [http://en.wikipedia.org/wiki/Restaurant restaurateur] trained in both [http://www.baychef.com/programs/hospitality_and_restaurant.asp restaurant management] and [http://www.baychef.com/programs/culinary_arts.asp culinary arts] at the [http://www.baychef.com/ California Culinary Academy]. For a few years from the late 1990s to the early 2000s, Henry was a [http://en.wikipedia.org/wiki/Graphic_designer graphic designer] trained at the [http://www.artinstitutes.edu/sanfrancisco/ Art Institute of San Francisco] and the [http://www.academyart.edu/ Academy of Art University] Visit Henry's new wine site: [http://glassofgrape.com/ Glass of Grape] ==Steven Lawrance== [[Steven Lawrance]] is an active practitioner of [http://en.wikipedia.org/wiki/Software_engineering software engineering] and [http://en.wikipedia.org/wiki/Open-source_software open-source software enthusiast] trained in [http://www.mse.cs.cmu.edu/ software engineering] at [http://www.mse.cs.cmu.edu/ Carnegie Mellon University] and [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ business administration] with [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems computer information systems] at [http://www.bryant.edu/ Bryant University] [[Steven Lawrance#Software Project Experience|Check out the list of software that Steve has either written or contributed to]] [http://www.facebook.com/people/Steven_Lawrance/514293518 Steven's Facebook profile] |valign="top" width="25%"| {|border="1" | <font size="5">[https://www.moonlightdesign.org/urllock/ IE URL Lock]</font> <font size="5">[http://gnucashtoqif.sourceforge.net/ GnuCashToQIF]</font> <font size="3">[https://www.moonlightdesign.org/dirlist DirList] [[CompactOnDelete]]</font> <font size="3">[[PortProxy]]</font> <font size="2">[[Serendipity|Team Serendipity]]</font> <font size="2">[[Disk Imager]]</font> <font size="1">[[ScreenWindowX]]</font> |} <small>[https://www.moonlightdesign.org/wireless/ Guest wireless network sign-up] (local network only)</small> |} 707149192c9448ca764791e8d66f621738695972 2154 2152 2009-06-13T15:07:42Z Stevenlawrance 1 /* Steven Lawrance */ wikitext text/x-wiki {| |valign="top"| Welcome to Moonlight Design -- the personal web site of [[Henry Lamb]] and [[Steven Lawrance]] ==Henry Lamb== [[Henry Lamb]] is a professional [http://en.wikipedia.org/wiki/Restaurant restaurateur] trained in both [http://www.baychef.com/programs/hospitality_and_restaurant.asp restaurant management] and [http://www.baychef.com/programs/culinary_arts.asp culinary arts] at the [http://www.baychef.com/ California Culinary Academy]. For a few years from the late 1990s to the early 2000s, Henry was a [http://en.wikipedia.org/wiki/Graphic_designer graphic designer] trained at the [http://www.artinstitutes.edu/sanfrancisco/ Art Institute of San Francisco] and the [http://www.academyart.edu/ Academy of Art University] Visit Henry's new wine site: [http://glassofgrape.com/ Glass of Grape] ==Steven Lawrance== [[Steven Lawrance]] is an active practitioner of [http://en.wikipedia.org/wiki/Software_engineering software engineering] and [http://en.wikipedia.org/wiki/Open-source_software open-source software enthusiast] trained in [http://www.mse.cs.cmu.edu/ software engineering] at [http://www.mse.cs.cmu.edu/ Carnegie Mellon University] and [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ business administration] with [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems computer information systems] at [http://www.bryant.edu/ Bryant University] [[Steven Lawrance#Software Project Experience|Check out the list of software that Steve has either written or contributed to]] [http://www.facebook.com/slawrance Steven's Facebook profile] |valign="top" width="25%"| {|border="1" | <font size="5">[https://www.moonlightdesign.org/urllock/ IE URL Lock]</font> <font size="5">[http://gnucashtoqif.sourceforge.net/ GnuCashToQIF]</font> <font size="3">[https://www.moonlightdesign.org/dirlist DirList] [[CompactOnDelete]]</font> <font size="3">[[PortProxy]]</font> <font size="2">[[Serendipity|Team Serendipity]]</font> <font size="2">[[Disk Imager]]</font> <font size="1">[[ScreenWindowX]]</font> |} <small>[https://www.moonlightdesign.org/wireless/ Guest wireless network sign-up] (local network only)</small> |} 00b3c1bf69fa6cd15381f11bc0b6ba1bc8ca1e2e Template:Tech:Salesforce.com 10 1649 2121 2008-10-09T13:18:00Z Stevenlawrance 1 New page: [http://www.force.com/ Force.com] wikitext text/x-wiki [http://www.force.com/ Force.com] cf916fc30e20365150425bf622c650788c6d4b14 Template:Tech:Servlet 10 1650 2122 2008-10-09T13:22:15Z Stevenlawrance 1 New page: [https://java.sun.com/products/servlet Servlets] wikitext text/x-wiki [https://java.sun.com/products/servlet Servlets] 5f616cc28950909db7fe62afdc6d63bbf6cf6609 2126 2122 2008-10-09T13:24:08Z Stevenlawrance 1 wikitext text/x-wiki [http://java.sun.com/products/servlet Servlets] 12d5733cb7a34839a3c3a8873fdaf91c07a33438 Template:Tech:JSP 10 1651 2123 2008-10-09T13:22:38Z Stevenlawrance 1 New page: [https://java.sun.com/products/jsp JSP] wikitext text/x-wiki [https://java.sun.com/products/jsp JSP] c8a337cd815ea5cc4ebb7e01165155d278ac037f 2125 2123 2008-10-09T13:23:54Z Stevenlawrance 1 wikitext text/x-wiki [http://java.sun.com/products/jsp JSP] 790be7c8ca189a5cff5d543ec4d0fe77eaad8b00 Template:Tech:Resin 10 1652 2124 2008-10-09T13:23:08Z Stevenlawrance 1 New page: [http://www.caucho.com/ Resin] wikitext text/x-wiki [http://www.caucho.com/ Resin] 65a907fcd89087a22721696871a7b8ca319c74fe CompactOnDelete 0 1653 2134 2008-12-11T08:21:56Z Stevenlawrance 1 New page: Compacts IMAP folders after messages are removed from the folder. Technically, the compact will happen when the window loses focus, but it appears to happen when the folder is changed, too... wikitext text/x-wiki Compacts IMAP folders after messages are removed from the folder. Technically, the compact will happen when the window loses focus, but it appears to happen when the folder is changed, too. It's good enough to use for now, but I'll try to fix that. [https://www.moonlightdesign.org/compactondelete/compactondelete-0.1.xpi Install extension] 5805eae0b3f1e409b57aadd1ac17521f294faf42 2135 2134 2008-12-11T15:48:43Z Stevenlawrance 1 wikitext text/x-wiki CompactOnDelete is a Mozilla Thunderbird extension that schedules IMAP folder compaction to happen when Thunderbird loses its window focus after messages are removed from an IMAP folder. Only those folders with removals are compacted. This is meant to automatically make deleted messages disappear from Outlook and Outlook Web Access on an Exchange server when they are deleted in Thunderbird. Other IMAP servers don't need this extension, and the use of this extension limits your ability to undo as soon as Thunderbird loses its window focus, since compacting a folder clears the undo/redo history. In version 0.1, the compaction also happens when the selected folder is changed, and I'll try to fix that. Other than that, this extension is good enough to use. A future enhancement could involve detecting which IMAP servers are Exchange and compacting only their folders on Thunderbird's focus loss. [https://www.moonlightdesign.org/compactondelete/compactondelete-0.1.xpi Install extension] 995f832babbb42dfd7b915122b4f663678c8d113 2137 2135 2008-12-11T15:52:06Z Stevenlawrance 1 wikitext text/x-wiki CompactOnDelete is a Mozilla Thunderbird extension that schedules IMAP folder compaction to happen when Thunderbird loses its window focus after messages are removed from an IMAP folder. Only those folders with removals are compacted. This is meant to automatically make deleted messages disappear from Outlook and Outlook Web Access on an Exchange server when they are deleted in Thunderbird. Other IMAP servers don't need this extension, and the use of this extension limits your ability to undo as soon as Thunderbird loses its window focus, since compacting a folder clears the undo/redo history. In version 0.1, the compaction also happens when the selected folder is changed, and I'll try to fix that. Other than that, this extension is good enough to use. A future enhancement could involve detecting which IMAP servers are Exchange and compacting only their folders on Thunderbird's focus loss. *[https://www.moonlightdesign.org/compactondelete/compactondelete-0.1.xpi Install extension] *[https://www.moonlightdesign.org/compactondelete/svn/ Subversion repository] 1bfc6b7c85c4cd68b414c3a1fd04962728ecd408 2138 2137 2008-12-11T16:19:07Z Stevenlawrance 1 wikitext text/x-wiki CompactOnDelete is a Mozilla Thunderbird extension that schedules IMAP folder compaction to happen when Thunderbird loses its window focus after messages are removed from an IMAP folder. Only those folders with removals are compacted. This is meant to automatically make deleted messages disappear from Outlook and Outlook Web Access on an Exchange server when they are deleted in Thunderbird. Other IMAP servers don't need this extension, and the use of this extension limits your ability to undo as soon as Thunderbird loses its window focus, since compacting a folder clears the undo/redo history. In version 0.1, the compaction also happens when the selected folder is changed, and I'll try to fix that. Other than that, this extension is good enough to use. A future enhancement could involve detecting which IMAP servers are Exchange and compacting only their folders on Thunderbird's focus loss. *[https://www.moonlightdesign.org/compactondelete/compactondelete-0.1.xpi Download extension] *[https://www.moonlightdesign.org/compactondelete/svn/ Subversion repository] 4f1cf7186c3e072f9b5e5ebb3fdd4c8bf8b07855 2139 2138 2008-12-12T08:47:29Z Stevenlawrance 1 wikitext text/x-wiki CompactOnDelete is a Mozilla Thunderbird extension that schedules IMAP folder compaction to happen when Thunderbird loses its window focus after messages are removed from an IMAP folder. Only those folders with removals are compacted. This is meant to automatically make deleted messages disappear from Outlook and Outlook Web Access on an Exchange server when they are deleted in Thunderbird. Other IMAP servers don't need this extension, and the use of this extension limits your ability to undo as soon as Thunderbird loses its window focus, since compacting a folder clears the undo/redo history. *[https://www.moonlightdesign.org/compactondelete/compactondelete-0.2.xpi Download extension] *[https://www.moonlightdesign.org/compactondelete/svn/ Subversion repository] A future enhancement could involve detecting which IMAP servers are Exchange and compacting only their folders on Thunderbird's focus loss. Presently, this extension will compact any IMAP folder that gets messages deleted or moved away from it. 3890af0abc0d6f8736bb1aa7c15f4d419fd2c8b1 2141 2139 2008-12-13T07:58:45Z Stevenlawrance 1 wikitext text/x-wiki CompactOnDelete is a Mozilla Thunderbird extension that schedules IMAP folder compaction to happen when Thunderbird loses its window focus after messages are removed from an IMAP folder. Only those folders with removals are compacted. This is meant to automatically make deleted messages disappear from Outlook and Outlook Web Access on an Exchange server when they are deleted in Thunderbird. Other IMAP servers don't need this extension, and the use of this extension limits your ability to undo as soon as Thunderbird loses its window focus, since compacting a folder clears the undo/redo history. *[https://www.moonlightdesign.org/compactondelete/compactondelete-0.3.xpi Download extension] *[https://www.moonlightdesign.org/compactondelete/svn/ Subversion repository] A future enhancement could involve detecting which IMAP servers are Exchange and compacting only their folders on Thunderbird's focus loss. Presently, this extension will compact any IMAP folder that gets messages deleted or moved away from it. e4f187115deeb516d4ce6c038fd4365887005b32 2142 2141 2008-12-15T04:13:41Z Stevenlawrance 1 wikitext text/x-wiki CompactOnDelete is a Mozilla Thunderbird extension that schedules IMAP folder compaction to happen when Thunderbird loses its window focus after messages are removed from an IMAP folder. Only those folders with removals are compacted. This is meant to automatically make deleted messages disappear from Outlook and Outlook Web Access on an Exchange server when they are deleted in Thunderbird. Other IMAP servers don't need this extension, and the use of this extension limits your ability to undo as soon as Thunderbird loses its window focus, since compacting a folder clears the undo/redo history. *[https://www.moonlightdesign.org/compactondelete/compactondelete-0.3.xpi Download extension] (right-click and select "Save Link As...") *[https://www.moonlightdesign.org/compactondelete/svn/ Subversion repository] A future enhancement could involve detecting which IMAP servers are Exchange and compacting only their folders on Thunderbird's focus loss. Presently, this extension will compact any IMAP folder that gets messages deleted or moved away from it. 8f08676f3850d2a949522b202b741c9fe8a28862 2143 2142 2008-12-15T04:18:01Z Stevenlawrance 1 wikitext text/x-wiki CompactOnDelete is a Mozilla Thunderbird extension that schedules IMAP folder compaction to happen when Thunderbird loses its window focus after messages are removed from an IMAP folder. Only those folders with removals are compacted; other folders are left alone. This is meant to automatically make deleted messages disappear from Outlook and Outlook Web Access on an Exchange server when they are deleted in Thunderbird. Other IMAP servers don't need this extension, and the use of this extension limits your ability to undo as soon as Thunderbird loses its window focus, since compacting a folder clears the undo/redo history. *[https://www.moonlightdesign.org/compactondelete/compactondelete-0.3.xpi Download extension] (right-click and select "Save Link As...") *[https://www.moonlightdesign.org/compactondelete/svn/ Subversion repository] A future enhancement could involve detecting which IMAP servers are Exchange and compacting only their folders on Thunderbird's focus loss. Presently, this extension will compact any IMAP folder that gets messages deleted or moved away from it. 32ec2632419dd8645f07e1b0b1f60d290632054e 2144 2143 2008-12-15T04:28:55Z Stevenlawrance 1 wikitext text/x-wiki CompactOnDelete is a Mozilla Thunderbird extension that schedules IMAP folder compaction to happen when Thunderbird loses its window focus after messages are removed from an IMAP folder. Only those folders with removals are compacted; other folders are left alone. This is meant to automatically make deleted messages disappear from Outlook and Outlook Web Access on an Exchange server when they are deleted in Thunderbird. Other IMAP servers don't need this extension, and the use of this extension limits your ability to undo as soon as Thunderbird loses its window focus, since compacting a folder clears the undo/redo history. *[https://www.moonlightdesign.org/compactondelete/compactondelete-0.3.xpi Download extension] (right-click and select "Save Link As...") *[https://www.moonlightdesign.org/compactondelete/svn/ Subversion repository] A future enhancement could involve detecting which IMAP servers are Exchange and compacting only their folders on Thunderbird's focus loss. Presently, this extension will compact any IMAP folder that gets messages deleted or moved away from it. CompactOnDelete is distributed under the terms of the [http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License (GPL), version 2]. 62f53c5278de9076252bbb78f6ded174de8bb77f 2145 2144 2008-12-15T04:32:26Z Stevenlawrance 1 wikitext text/x-wiki CompactOnDelete is a Mozilla Thunderbird extension that schedules IMAP folder compaction to happen when Thunderbird loses its window focus after messages are removed from an IMAP folder. Only those folders with removals are compacted; other folders are left alone. This is meant to automatically make deleted messages disappear from Outlook and Outlook Web Access on an Exchange server when they are deleted in Thunderbird. Other IMAP servers don't need this extension, and the use of this extension limits your ability to undo as soon as Thunderbird loses its window focus, since compacting a folder clears the undo/redo history. *[https://www.moonlightdesign.org/compactondelete/compactondelete-0.3.xpi Download extension] (right-click and select "Save Link As...") *[https://www.moonlightdesign.org/compactondelete/svn/ Subversion repository] A future enhancement could involve detecting which IMAP servers are Exchange and compacting only their folders on Thunderbird's focus loss. Presently, this extension will compact any IMAP folder that gets messages deleted or moved away from it. CompactOnDelete is distributed under the terms of the [http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License (GPL), version 2], and is copyright (c) 2008 Steven Lawrance. 2bbb3a869aaecff79521038c2b49870bb91bfedb 2146 2145 2008-12-15T04:36:21Z Stevenlawrance 1 wikitext text/x-wiki CompactOnDelete is a Mozilla Thunderbird extension that schedules IMAP folder compaction to happen when Thunderbird loses its window focus after messages are removed from an IMAP folder. Only those folders with removals are compacted; other folders are left alone. This is meant to automatically make deleted messages disappear from Outlook and Outlook Web Access on an Exchange server when they are deleted in Thunderbird. Other IMAP servers don't need this extension, and the use of this extension limits your ability to undo as soon as Thunderbird loses its window focus, since compacting a folder clears the undo/redo history. *[https://www.moonlightdesign.org/compactondelete/compactondelete-0.3.xpi Download extension] (right-click and select "Save Link As...") *[https://www.moonlightdesign.org/compactondelete/svn/ Subversion repository] A future enhancement could involve detecting which IMAP servers are Exchange and compacting only their folders on Thunderbird's focus loss. Presently, this extension will compact any IMAP folder that gets messages deleted or moved away from it. Another enhancement can be to compact the folders that a focus loss would have compacted when Thunderbird is closed. CompactOnDelete is distributed under the terms of the [http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License (GPL), version 2], and is copyright (c) 2008 Steven Lawrance. 6c3e55e1b8dbda1e3777b8ea11101a4d0418a059 2150 2146 2009-01-11T01:03:55Z Stevenlawrance 1 wikitext text/x-wiki CompactOnDelete is a Mozilla Thunderbird extension that schedules IMAP folder compaction to happen when Thunderbird loses its window focus after messages are removed from an IMAP folder. Only those folders with removals are compacted; other folders are left alone. This is meant to automatically make deleted messages disappear from Outlook and Outlook Web Access on an Exchange server when they are deleted in Thunderbird. Other IMAP servers don't need this extension, and the use of this extension limits your ability to undo as soon as Thunderbird loses its window focus, since compacting a folder clears the undo/redo history. *[https://www.moonlightdesign.org/compactondelete/compactondelete-0.4.5.xpi Download extension] (right-click and select "Save Link As...") *[https://www.moonlightdesign.org/compactondelete/svn/ Subversion repository] A future enhancement could involve detecting which IMAP servers are Exchange and compacting only their folders on Thunderbird's focus loss. Presently, this extension will compact any IMAP folder that gets messages deleted or moved away from it. Another enhancement can be to compact the folders that a focus loss would have compacted when Thunderbird is closed. CompactOnDelete is distributed under the terms of the [http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License (GPL), version 2], and is copyright (c) 2008 Steven Lawrance. a396ef8ed43d3299f8e0013c099069149d5f81da 2151 2150 2009-01-11T01:14:19Z Stevenlawrance 1 wikitext text/x-wiki CompactOnDelete is a Mozilla Thunderbird extension that schedules IMAP folder compaction to happen when Thunderbird loses its window focus or closes after messages are removed from an IMAP folder. Only those folders with removals are compacted; other folders are left alone. This is meant to automatically make deleted messages disappear from Outlook and Outlook Web Access on an Exchange server when they are deleted in Thunderbird. Other IMAP servers don't need this extension, and the use of this extension limits your ability to undo as soon as Thunderbird loses its window focus, since compacting a folder clears the undo/redo history. *[https://www.moonlightdesign.org/compactondelete/compactondelete-0.4.5.xpi Download extension] (right-click and select "Save Link As...") *[https://www.moonlightdesign.org/compactondelete/svn/ Subversion repository] A future enhancement could involve detecting which IMAP servers are Exchange and compacting only their folders on Thunderbird's focus loss. Presently, this extension will compact any IMAP folder that gets messages deleted or moved away from it. This extension now compacts the folders that a focus loss would have compacted when Thunderbird is closed, though it presently does not work if the user uses File | Quit instead of closing the window. CompactOnDelete is distributed under the terms of the [http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License (GPL), version 2], and is copyright (c) 2008 Steven Lawrance. cb53958ec49fdcdce4aeb85a2f0efe03d05ada93 Moonlight Design:Community Portal 4 1654 2156 2009-06-15T04:22:09Z Savitra 3 New page: Test Entry wikitext text/x-wiki Test Entry 28760e356019607d78d27cbc22d184570d5b3729 Steven Lawrance 0 1409 2159 2158 2009-07-30T03:13:54Z Stevenlawrance 1 /* Salesforce.com */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Networks:''' [http://www.linkedin.com/in/meowmeow LinkedIn], [http://www.facebook.com/slawrance Facebook] Note that some content below has not been written yet, and missing parts will be filled in before the end of 2008. Please feel free to ask me for more information about any project. ==Interests== My software interests are presently in the following areas: {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Software as a Service (SaaS)</h3> *{{Tech:Salesforce.com}} platform |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[CompactOnDelete]] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |- |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |- |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Design and implementation of concurrent software and improving the thread safety of existing software *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |- |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |- |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.salesforce.com/ Salesforce.com]||Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization, wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests, built the security testing framework for package access controls, enhanced an internal production server testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions. I also ensured that the software produced by my teams functioned properly through automated and manual testing||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}||large||2007-2009 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list]||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: Core Infrastructure, Security, and API Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a very large number of vulnerabilities, thus making Salesforce.com more secure **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls] **Tracked down and, in some cases, fixed difficult threading and cache related bugs **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming the go-to person for HTTPS and SSL **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 1c9c97e20c180e917d86f7dcee03fa4ae7e7dbbe 2160 2159 2009-07-30T03:14:38Z Stevenlawrance 1 /* Salesforce.com */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Networks:''' [http://www.linkedin.com/in/meowmeow LinkedIn], [http://www.facebook.com/slawrance Facebook] Note that some content below has not been written yet, and missing parts will be filled in before the end of 2008. Please feel free to ask me for more information about any project. ==Interests== My software interests are presently in the following areas: {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Software as a Service (SaaS)</h3> *{{Tech:Salesforce.com}} platform |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[CompactOnDelete]] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |- |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |- |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Design and implementation of concurrent software and improving the thread safety of existing software *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |- |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |- |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.salesforce.com/ Salesforce.com]||Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization, wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests, built the security testing framework for package access controls, enhanced an internal production server testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions. I also ensured that the software produced by my teams functioned properly through automated and manual testing||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}||large||2007-2009 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list]||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: Core Infrastructure, Security, and API Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls] **Tracked down and, in some cases, fixed difficult threading and cache related bugs **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming the go-to person for HTTPS and SSL **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 40094778603aeaeb1c18b445dd086404a8f7d232 2165 2160 2009-08-23T14:47:15Z Stevenlawrance 1 wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Networks:''' [http://www.linkedin.com/in/meowmeow LinkedIn], [http://www.facebook.com/slawrance Facebook] Please feel free to ask me for more information about any project listed on this page. ==Interests== My software interests are presently in the following areas: {| border="1" cellpadding="5" |- |valign="top" width="50%"|<h3>Software as a Service (SaaS)</h3> *{{Tech:Salesforce.com}} platform |valign="top" width="50%"|<h3>Mozilla Thunderbird and Firefox extension development</h3> *Mozilla product extensions *[https://www.moonlightdesign.org/thunderforce/Main_Page Thunderforce] *[[CompactOnDelete]] *[[Teacher's Pet]] *[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock] |- |valign="top" width="50%"| <h3>Microsoft Windows to Linux computer and network migrations</h3> [[Image:Tux.png|right]] *Cost effectiveness assessments *Project planning *Training *Migration execution *Profile migrations using [[Home Profiler]] *Windows application porting to Linux using [http://www.winehq.org/ Wine] |valign="top" width="50%"|<h3>Custom software development</h3> *Data entry and reporting systems *Middleware and network software development *Desktop client application development *Software process metrics, measurements, and analysis |- |valign="top" width="50%"| <h3>Linux, Apache, MySQL, and PHP (LAMP) solution development</h3> *Maintenance and extension of existing LAMP projects *Installation, maintenance, and extension of at least the following software: **MediaWiki document collaboration **phpESP survey software *[[ResNet Online|Bryant University ResNet Online]] *[[Guest Pass|Bryant University Guest Pass]] |valign="top" width="50%"| <h3>Java application development</h3> *Development of Java-based web and desktop applications *Design and implementation of concurrent software and improving the thread safety of existing software *Swing and SWT graphical user interfaces *[[Serendipity|Bosch Security Configuration Assistant]] *[[Reggie/CIS]], including the spell-as-you-type spell checker *Security test framework for AppExchange packages in Salesforce.com |- |valign="top" width="50%"| <h3>Software and network security</h3> *Security in software development processes *Border, network, and local system security *Web application security *Centralized LDAP authentication *Encryption and certificates, including TLS and SSL *Novell AppArmor *Linux iptables *Astaro Secure Linux *Cisco PIX and IOS configurations and access control lists (ACLs) |valign="top" width="50%"| <h3>Building and home automation</h3> *Computer-based electrical device control *[[Home Control]] *[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock] |- |valign="top" width="50%"|<h3>Linux server configuration and maintenance</h3> *Planning, installation, and maintenance of Linux servers *Configuration and maintenance of [[Linux server services|standard and enterprise network services]] *Creation of special-purpose FUSE filesystems, such as the [[Read-only filesystem|read-only filesystem]] *Customized network security, filtering, and routing rules *Active and deep knowledge of security technologies, including TLS and SSL |} ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.salesforce.com/ Salesforce.com]||Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization, wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests, built the security testing framework for package access controls, enhanced an internal production server testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions. I also ensured that the software produced by my teams functioned properly through automated and manual testing||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}||large||2007-2009 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list]||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: Core Infrastructure, Security, and API Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls] **Tracked down and, in some cases, fixed difficult threading and cache related bugs **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming the go-to person for HTTPS and SSL **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] d206bf09e5692ca18a2f0de3340268735bbd736c 2166 2165 2009-08-23T16:03:26Z Stevenlawrance 1 /* Interests */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Networks:''' [http://www.linkedin.com/in/meowmeow LinkedIn], [http://www.facebook.com/slawrance Facebook] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.salesforce.com/ Salesforce.com]||Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization, wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests, built the security testing framework for package access controls, enhanced an internal production server testing tool's user interface, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions. I also ensured that the software produced by my teams functioned properly through automated and manual testing||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}||large||2007-2009 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list]||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: Core Infrastructure, Security, and API Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls] **Tracked down and, in some cases, fixed difficult threading and cache related bugs **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming the go-to person for HTTPS and SSL **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] f376bd4b60d8504b31d58747661396cc1be9367e 2167 2166 2009-08-24T00:15:43Z Stevenlawrance 1 /* Team software */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Networks:''' [http://www.linkedin.com/in/meowmeow LinkedIn], [http://www.facebook.com/slawrance Facebook] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.salesforce.com/ Salesforce.com]||Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization, wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests, built a security testing framework for package access controls, enhanced an internal production server testing tool's user interface and configuration system, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions. I also ensured that the software produced by my teams functioned properly through automated and manual testing||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}||large||2007-2009 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||During the Summer of 1999, I worked with Ariesnet, Inc. on creating its PHP-based Ariesbase intranet system. I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list]||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: Core Infrastructure, Security, and API Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls] **Tracked down and, in some cases, fixed difficult threading and cache related bugs **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming the go-to person for HTTPS and SSL **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 7664091fb8d03059cf513d219e1d6407df43faf0 2168 2167 2009-08-24T00:22:10Z Stevenlawrance 1 /* Team software */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Networks:''' [http://www.linkedin.com/in/meowmeow LinkedIn], [http://www.facebook.com/slawrance Facebook] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.salesforce.com/ Salesforce.com]||Web-based business software platform and suite of integrated business applications. For Salesforce.com, I wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests, improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization, built a security testing framework for package access controls, enhanced an internal production server testing tool's user interface and configuration system, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions. I also ensured that the software produced by my teams functioned properly through automated and manual testing||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}||large||2007-2009 |- |[[Reggie/CIS]]||A large 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Donor, donation, and fundraising event management system used by the San Francisco AIDS Foundation. I migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite]||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||Intranet system for Ariesnet, Inc. During the Summer of 1999, I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list]||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: Core Infrastructure, Security, and API Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls] **Tracked down and, in some cases, fixed difficult threading and cache related bugs **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming the go-to person for HTTPS and SSL **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] cbb47a80581b69e208307e54fadc853868237fd1 2169 2168 2009-08-24T00:25:13Z Stevenlawrance 1 /* Team software */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Networks:''' [http://www.linkedin.com/in/meowmeow LinkedIn], [http://www.facebook.com/slawrance Facebook] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.salesforce.com/ Salesforce.com]||Web-based business software platform and suite of integrated business applications. For Salesforce.com, I wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests, improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization, built a security testing framework for package access controls, enhanced an internal production server testing tool's user interface and configuration system, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions. I also ensured that the software produced by my teams functioned properly through automated and manual testing.||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}||large||2007-2009 |- |[[Reggie/CIS]]||A 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used.||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Donor, donation, and fundraising event management system used by the San Francisco AIDS Foundation. I migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization. In this project, FIXME.||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||Intranet system for Ariesnet, Inc. During the Summer of 1999, I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list]||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: Core Infrastructure, Security, and API Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls] **Tracked down and, in some cases, fixed difficult threading and cache related bugs **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming the go-to person for HTTPS and SSL **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 883dec7c9cd86610bc85bdc1a991caa4390420c7 2170 2169 2009-08-24T00:37:48Z Stevenlawrance 1 /* Team software */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Networks:''' [http://www.linkedin.com/in/meowmeow LinkedIn], [http://www.facebook.com/slawrance Facebook] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.salesforce.com/ Salesforce.com]||Web-based business software platform and suite of integrated business applications. For Salesforce.com, I wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests, improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization, built a security testing framework for package access controls, enhanced an internal production server testing tool's user interface and configuration system, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions. I also ensured that the software produced by my teams functioned properly through automated and manual testing.||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}||large||2007-2009 |- |[[Reggie/CIS]]||A 200-user multi-tenant three-tiered system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used.||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Donor, donation, and fundraising event management system used by the San Francisco AIDS Foundation. I migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization. In this project, I integrated a Windows-based three-dimensional visualization program into an Eclipse view, kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project, and automated our data collection and reporting processes to minimize project overhead work. This group project involved four other students -- two whom also work at Salesforce.com -- and served as a laboratory for us to directly apply coursework to a software project with a real client throughout our software engineering masters' programs.||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project.||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments.||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features.||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web.||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||Intranet system for Ariesnet, Inc. During the Summer of 1999, I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments.||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list]||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: Core Infrastructure, Security, and API Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls] **Tracked down and, in some cases, fixed difficult threading and cache related bugs **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming the go-to person for HTTPS and SSL **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 0c67144dd985a3ce575af2fe23f1240447624fa5 2171 2170 2009-08-24T00:40:01Z Stevenlawrance 1 /* Team software */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Networks:''' [http://www.linkedin.com/in/meowmeow LinkedIn], [http://www.facebook.com/slawrance Facebook] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.salesforce.com/ Salesforce.com]||Web-based business software platform and suite of integrated business applications. For Salesforce.com, I wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests, improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization, built a security testing framework for package access controls, enhanced an internal production server testing tool's user interface and configuration system, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions. I also ensured that the software produced by my teams functioned properly through automated and manual testing.||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}||large||2007-2009 |- |[[Reggie/CIS]]||A 200-user multi-tenant three-tiered HIV/AIDS client database system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used.||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Donor, donation, and fundraising event management system used by the San Francisco AIDS Foundation. I migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization. In this project, I integrated a Windows-based three-dimensional visualization program into an Eclipse view, kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project, and automated our data collection and reporting processes to minimize project overhead work. This group project involved four other students -- two whom also work at Salesforce.com -- and served as a laboratory for us to directly apply coursework to a software project with a real client throughout our software engineering masters' programs.||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project.||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments.||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features.||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web.||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||Intranet system for Ariesnet, Inc. During the Summer of 1999, I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments.||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list]||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: Core Infrastructure, Security, and API Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls] **Tracked down and, in some cases, fixed difficult threading and cache related bugs **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming the go-to person for HTTPS and SSL **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 3d0b2b9d35fa7868b625f55cf216797bd5de2854 2172 2171 2009-08-24T00:40:42Z Stevenlawrance 1 /* Team software */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Networks:''' [http://www.linkedin.com/in/meowmeow LinkedIn], [http://www.facebook.com/slawrance Facebook] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.salesforce.com/ Salesforce.com]||Web-based business software platform and suite of integrated business applications. For Salesforce.com, I wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests, improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization, built a security testing framework for package access controls, enhanced an internal production server testing tool's user interface and configuration system, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions. I also ensured that the software produced by my teams functioned properly through automated and manual testing.||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}||large||2007-2009 |- |[[Reggie/CIS]]||A 200-user multi-tenant three-tiered HIV/AIDS client database system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used.||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Donor and fundraising event management system used by the San Francisco AIDS Foundation. I migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization. In this project, I integrated a Windows-based three-dimensional visualization program into an Eclipse view, kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project, and automated our data collection and reporting processes to minimize project overhead work. This group project involved four other students -- two whom also work at Salesforce.com -- and served as a laboratory for us to directly apply coursework to a software project with a real client throughout our software engineering masters' programs.||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project.||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments.||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features.||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web.||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||Intranet system for Ariesnet, Inc. During the Summer of 1999, I mostly helped out with the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments.||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list]||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: Core Infrastructure, Security, and API Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls] **Tracked down and, in some cases, fixed difficult threading and cache related bugs **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming the go-to person for HTTPS and SSL **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 22f02683c12a0407a9b11e332a0e7a8067305def 2173 2172 2009-08-24T00:41:30Z Stevenlawrance 1 /* Team software */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Networks:''' [http://www.linkedin.com/in/meowmeow LinkedIn], [http://www.facebook.com/slawrance Facebook] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.salesforce.com/ Salesforce.com]||Web-based business software platform and suite of integrated business applications. For Salesforce.com, I wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests, improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization, built a security testing framework for package access controls, enhanced an internal production server testing tool's user interface and configuration system, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions. I also ensured that the software produced by my teams functioned properly through automated and manual testing.||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}||large||2007-2009 |- |[[Reggie/CIS]]||A 200-user multi-tenant three-tiered HIV/AIDS client database system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used.||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Donor and fundraising event management system used by the San Francisco AIDS Foundation. I migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization. In this project, I integrated a Windows-based three-dimensional visualization program into an Eclipse view, kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project, and automated our data collection and reporting processes to minimize project overhead work. This group project involved four other students -- two whom also work at Salesforce.com -- and served as a laboratory for us to directly apply coursework to a software project with a real client throughout our software engineering masters' programs.||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project.||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments.||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features.||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web.||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||Intranet system for Ariesnet, Inc. During the Summer of 1999, I helped shape the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments.||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2006 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list]||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: Core Infrastructure, Security, and API Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls] **Tracked down and, in some cases, fixed difficult threading and cache related bugs **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming the go-to person for HTTPS and SSL **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 8ea7a8b2626a031b5bf33072b18ee774bb2cd6aa 2174 2173 2009-08-24T00:43:34Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Networks:''' [http://www.linkedin.com/in/meowmeow LinkedIn], [http://www.facebook.com/slawrance Facebook] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.salesforce.com/ Salesforce.com]||Web-based business software platform and suite of integrated business applications. For Salesforce.com, I wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests, improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization, built a security testing framework for package access controls, enhanced an internal production server testing tool's user interface and configuration system, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions. I also ensured that the software produced by my teams functioned properly through automated and manual testing.||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}||large||2007-2009 |- |[[Reggie/CIS]]||A 200-user multi-tenant three-tiered HIV/AIDS client database system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used.||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Donor and fundraising event management system used by the San Francisco AIDS Foundation. I migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization. In this project, I integrated a Windows-based three-dimensional visualization program into an Eclipse view, kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project, and automated our data collection and reporting processes to minimize project overhead work. This group project involved four other students -- two whom also work at Salesforce.com -- and served as a laboratory for us to directly apply coursework to a software project with a real client throughout our software engineering masters' programs.||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project.||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments.||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features.||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web.||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||Intranet system for Ariesnet, Inc. During the Summer of 1999, I helped shape the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments.||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2008 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list]||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon substantially. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: Core Infrastructure, Security, and API Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls] **Tracked down and, in some cases, fixed difficult threading and cache related bugs **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming the go-to person for HTTPS and SSL **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 544fc2685d60550d7c147f2de4d694fc82910d95 2175 2174 2009-08-24T00:55:49Z Stevenlawrance 1 /* Software and project contributions */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Networks:''' [http://www.linkedin.com/in/meowmeow LinkedIn], [http://www.facebook.com/slawrance Facebook] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.salesforce.com/ Salesforce.com]||Web-based business software platform and suite of integrated business applications. For Salesforce.com, I wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests, improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization, built a security testing framework for package access controls, enhanced an internal production server testing tool's user interface and configuration system, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, and ensured that new releases of the core product did not break older API versions. I also ensured that the software produced by my teams functioned properly through automated and manual testing.||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}||large||2007-2009 |- |[[Reggie/CIS]]||A 200-user multi-tenant three-tiered HIV/AIDS client database system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used.||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Donor and fundraising event management system used by the San Francisco AIDS Foundation. I migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization. In this project, I integrated a Windows-based three-dimensional visualization program into an Eclipse view, kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project, and automated our data collection and reporting processes to minimize project overhead work. This group project involved four other students -- two whom also work at Salesforce.com -- and served as a laboratory for us to directly apply coursework to a software project with a real client throughout our software engineering masters' programs.||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project.||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments.||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features.||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web.||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||Intranet system for Ariesnet, Inc. During the Summer of 1999, I helped shape the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments.||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2008 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list]||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon significantly. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: Core Infrastructure, Security, and API Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls] **Tracked down and, in some cases, fixed difficult threading and cache related bugs **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming the go-to person for HTTPS and SSL **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] d9d0bc07343ffdbcc154a716efd6c57cbc0d1658 2177 2175 2009-08-24T00:59:58Z Stevenlawrance 1 /* Team software */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Networks:''' [http://www.linkedin.com/in/meowmeow LinkedIn], [http://www.facebook.com/slawrance Facebook] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.salesforce.com/ Salesforce.com]||Web-based business software platform and suite of integrated business applications. For Salesforce.com, I wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests, improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization, built a security testing framework for package access controls, enhanced an internal production server testing tool's user interface and configuration system, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, added per-window screenshots to an internal testing tool by extending Selenium with JNI native code, and ensured that new releases of the core product did not break older API versions. I also ensured that the software produced by my teams functioned properly through automated and manual testing.||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:Selenium}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}||large||2007-2009 |- |[[Reggie/CIS]]||A 200-user multi-tenant three-tiered HIV/AIDS client database system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used.||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Donor and fundraising event management system used by the San Francisco AIDS Foundation. I migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization. In this project, I integrated a Windows-based three-dimensional visualization program into an Eclipse view, kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project, and automated our data collection and reporting processes to minimize project overhead work. This group project involved four other students -- two whom also work at Salesforce.com -- and served as a laboratory for us to directly apply coursework to a software project with a real client throughout our software engineering masters' programs.||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project.||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments.||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features.||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web.||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||Intranet system for Ariesnet, Inc. During the Summer of 1999, I helped shape the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments.||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2008 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list]||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon significantly. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: Core Infrastructure, Security, and API Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls] **Tracked down and, in some cases, fixed difficult threading and cache related bugs **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming the go-to person for HTTPS and SSL **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] f92c1e1e4ccc0f8c1fbbacd1dea23cbfd14bb102 2178 2177 2009-08-24T01:00:25Z Stevenlawrance 1 /* Team software */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Networks:''' [http://www.linkedin.com/in/meowmeow LinkedIn], [http://www.facebook.com/slawrance Facebook] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.salesforce.com/ Salesforce.com]||Web-based business software platform and suite of integrated business applications. For Salesforce.com, I wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests, improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization, built a security testing framework for package access controls, enhanced an internal production server testing tool's user interface and configuration system, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, added per-window screenshots to an internal testing tool by extending Selenium with JNI native code, and ensured that new releases of the core product did not break older API versions. I also ensured that the software produced by my teams functioned properly through automated and manual testing.||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:Selenium}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}, {{Tech:JNI}}||large||2007-2009 |- |[[Reggie/CIS]]||A 200-user multi-tenant three-tiered HIV/AIDS client database system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used.||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Donor and fundraising event management system used by the San Francisco AIDS Foundation. I migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization. In this project, I integrated a Windows-based three-dimensional visualization program into an Eclipse view, kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project, and automated our data collection and reporting processes to minimize project overhead work. This group project involved four other students -- two whom also work at Salesforce.com -- and served as a laboratory for us to directly apply coursework to a software project with a real client throughout our software engineering masters' programs.||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project.||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments.||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features.||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web.||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||Intranet system for Ariesnet, Inc. During the Summer of 1999, I helped shape the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments.||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2008 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list]||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon significantly. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: Core Infrastructure, Security, and API Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls] **Tracked down and, in some cases, fixed difficult threading and cache related bugs **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming the go-to person for HTTPS and SSL **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 35cff1e4dec15e78a50a26234450b0f9b70956f9 2179 2178 2009-08-24T01:01:13Z Stevenlawrance 1 /* Team software */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Networks:''' [http://www.linkedin.com/in/meowmeow LinkedIn], [http://www.facebook.com/slawrance Facebook] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.salesforce.com/ Salesforce.com]||Web-based business software platform and suite of integrated business applications. For Salesforce.com, I wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests, improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization, built a security testing framework for package access controls, enhanced an internal production server testing tool's user interface and configuration system, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, added per-window screenshots to an internal testing tool by extending Selenium with JNI native code, and ensured that new releases of the core product did not break older API versions. I also ensured that the software produced by my teams functioned properly through automated and manual testing.||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:Selenium}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}||large||2007-2009 |- |[[Reggie/CIS]]||A 200-user multi-tenant three-tiered HIV/AIDS client database system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used.||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Donor and fundraising event management system used by the San Francisco AIDS Foundation. I migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization. In this project, I integrated a Windows-based three-dimensional visualization program into an Eclipse view, kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project, and automated our data collection and reporting processes to minimize project overhead work. This group project involved four other students -- two whom also work at Salesforce.com -- and served as a laboratory for us to directly apply coursework to a software project with a real client throughout our software engineering masters' programs.||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project.||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments.||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features.||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web.||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||Intranet system for Ariesnet, Inc. During the Summer of 1999, I helped shape the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments.||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2008 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced [http://web.bryant.edu/~pride/ Bryant PRIDE's] site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list]||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon significantly. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: Core Infrastructure, Security, and API Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls] **Tracked down and, in some cases, fixed difficult threading and cache related bugs **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming the go-to person for HTTPS and SSL **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] d7e05766f3ff5b21e1add40607a189dab88fc61d 2180 2179 2009-08-24T01:07:58Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Networks:''' [http://www.linkedin.com/in/meowmeow LinkedIn], [http://www.facebook.com/slawrance Facebook] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.salesforce.com/ Salesforce.com]||Web-based business software platform and suite of integrated business applications. For Salesforce.com, I wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests, improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization, built a security testing framework for package access controls, enhanced an internal production server testing tool's user interface and configuration system, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, added per-window screenshots to an internal testing tool by extending Selenium with JNI native code, and ensured that new releases of the core product did not break older API versions. I also ensured that the software produced by my teams functioned properly through automated and manual testing.||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:Selenium}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}||large||2007-2009 |- |[[Reggie/CIS]]||A 200-user multi-tenant three-tiered HIV/AIDS client database system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used.||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Donor and fundraising event management system used by the San Francisco AIDS Foundation. I migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization. In this project, I integrated a Windows-based three-dimensional visualization program into an Eclipse view, kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project, and automated our data collection and reporting processes to minimize project overhead work. This group project involved four other students -- two whom also work at Salesforce.com -- and served as a laboratory for us to directly apply coursework to a software project with a real client throughout our software engineering masters' programs.||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project.||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments.||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features.||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web.||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||Intranet system for Ariesnet, Inc. During the Summer of 1999, I helped shape the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments.||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2008 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list]||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS]||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||Web site for the [http://web.bryant.edu/~pride/ Bryant PRIDE] LGBT group. In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced the web site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95]||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI]||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list]||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon significantly. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: Core Infrastructure, Security, and API Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls] **Tracked down and, in some cases, fixed difficult threading and cache related bugs **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming the go-to person for HTTPS and SSL **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 67708082b760743051fb271950803c6ae6122871 2181 2180 2009-08-24T01:11:30Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Networks:''' [http://www.linkedin.com/in/meowmeow LinkedIn], [http://www.facebook.com/slawrance Facebook] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.salesforce.com/ Salesforce.com]||Web-based business software platform and suite of integrated business applications. For Salesforce.com, I wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests, improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization, built a security testing framework for package access controls, enhanced an internal production server testing tool's user interface and configuration system, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, added per-window screenshots to an internal testing tool by extending Selenium with JNI native code, and ensured that new releases of the core product did not break older API versions. I also ensured that the software produced by my teams functioned properly through automated and manual testing.||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:Selenium}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}||large||2007-2009 |- |[[Reggie/CIS]]||A 200-user multi-tenant three-tiered HIV/AIDS client database system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used.||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Donor and fundraising event management system used by the San Francisco AIDS Foundation. I migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization. In this project, I integrated a Windows-based three-dimensional visualization program into an Eclipse view, kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project, and automated our data collection and reporting processes to minimize project overhead work. This group project involved four other students -- two whom also work at Salesforce.com -- and served as a laboratory for us to directly apply coursework to a software project with a real client throughout our software engineering masters' programs.||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project.||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments.||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features.||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web.||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||Intranet system for Ariesnet, Inc. During the Summer of 1999, I helped shape the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments.||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind.||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2008 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage.||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface.||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel.||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file.||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system.||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon.||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door.||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server.||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list].||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS].||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans.||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction.||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed.||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||Web site for the [http://web.bryant.edu/~pride/ Bryant PRIDE] LGBT group. In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced the web site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}.||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on.||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface.||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School.||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context.||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95].||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2.||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI].||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays.||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments.||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular.||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts.||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows.||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete.||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking.||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards.||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}.||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own.||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities.||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS.||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]].||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)].||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished.||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list]||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon significantly. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: Core Infrastructure, Security, and API Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls] **Tracked down and, in some cases, fixed difficult threading and cache related bugs **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming the go-to person for HTTPS and SSL **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 8a2b5b1caf389eb73caa2693db05d140d0a71e60 2182 2181 2009-08-24T01:12:05Z Stevenlawrance 1 /* Software and project contributions */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Networks:''' [http://www.linkedin.com/in/meowmeow LinkedIn], [http://www.facebook.com/slawrance Facebook] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.salesforce.com/ Salesforce.com]||Web-based business software platform and suite of integrated business applications. For Salesforce.com, I wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests, improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization, built a security testing framework for package access controls, enhanced an internal production server testing tool's user interface and configuration system, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, added per-window screenshots to an internal testing tool by extending Selenium with JNI native code, and ensured that new releases of the core product did not break older API versions. I also ensured that the software produced by my teams functioned properly through automated and manual testing.||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:Selenium}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}||large||2007-2009 |- |[[Reggie/CIS]]||A 200-user multi-tenant three-tiered HIV/AIDS client database system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used.||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Donor and fundraising event management system used by the San Francisco AIDS Foundation. I migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization. In this project, I integrated a Windows-based three-dimensional visualization program into an Eclipse view, kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project, and automated our data collection and reporting processes to minimize project overhead work. This group project involved four other students -- two whom also work at Salesforce.com -- and served as a laboratory for us to directly apply coursework to a software project with a real client throughout our software engineering masters' programs.||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project.||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments.||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features.||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web.||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||Intranet system for Ariesnet, Inc. During the Summer of 1999, I helped shape the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments.||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind.||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2008 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage.||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface.||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel.||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file.||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system.||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon.||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door.||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server.||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list].||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS].||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans.||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction.||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed.||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||Web site for the [http://web.bryant.edu/~pride/ Bryant PRIDE] LGBT group. In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced the web site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}.||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on.||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface.||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School.||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context.||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95].||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2.||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI].||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays.||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments.||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular.||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts.||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows.||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete.||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking.||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards.||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}.||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own.||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities.||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS.||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]].||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)].||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished.||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build.|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt.|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers.||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions.||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list].||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant.||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon significantly. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: Core Infrastructure, Security, and API Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls] **Tracked down and, in some cases, fixed difficult threading and cache related bugs **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface and added Apache Ant build files to an internal production testing tool **Created and automated anti-phishing and security test scenarios **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming the go-to person for HTTPS and SSL **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 32d7d845555428c57ab78e46787aa8b259941a42 2183 2182 2009-08-24T01:21:29Z Stevenlawrance 1 /* Employment History */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Networks:''' [http://www.linkedin.com/in/meowmeow LinkedIn], [http://www.facebook.com/slawrance Facebook] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.salesforce.com/ Salesforce.com]||Web-based business software platform and suite of integrated business applications. For Salesforce.com, I wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests, improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization, built a security testing framework for package access controls, enhanced an internal production server testing tool's user interface and configuration system, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, added per-window screenshots to an internal testing tool by extending Selenium with JNI native code, and ensured that new releases of the core product did not break older API versions. I also ensured that the software produced by my teams functioned properly through automated and manual testing.||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:Selenium}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}||large||2007-2009 |- |[[Reggie/CIS]]||A 200-user multi-tenant three-tiered HIV/AIDS client database system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used.||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Donor and fundraising event management system used by the San Francisco AIDS Foundation. I migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization. In this project, I integrated a Windows-based three-dimensional visualization program into an Eclipse view, kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project, and automated our data collection and reporting processes to minimize project overhead work. This group project involved four other students -- two whom also work at Salesforce.com -- and served as a laboratory for us to directly apply coursework to a software project with a real client throughout our software engineering masters' programs.||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project.||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments.||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features.||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web.||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||Intranet system for Ariesnet, Inc. During the Summer of 1999, I helped shape the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments.||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind.||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,105||2005-2008 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage.||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface.||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel.||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file.||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system.||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon.||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door.||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server.||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list].||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS].||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans.||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction.||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed.||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||Web site for the [http://web.bryant.edu/~pride/ Bryant PRIDE] LGBT group. In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced the web site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}.||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on.||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface.||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School.||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context.||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95].||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2.||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI].||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays.||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments.||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular.||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts.||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows.||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete.||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking.||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards.||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}.||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own.||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities.||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS.||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]].||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)].||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished.||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build.|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt.|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers.||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions.||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list].||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant.||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon significantly. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: Core Infrastructure, Security, and API Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure. A security research firm later commended Salesforce.com's security, saying that they couldn't find any XSS or cross site request forgery (CSRF) vulnerabilities despite looking for them over the course of several days. **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization. **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls], which helped quickly bring that feature to market with confidence in its quality and security. **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending. **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce]. **Enhanced the user interface of, added Apache Ant build files to, and significantly improved the configuration system of an internal production testing tool that is used by multiple teams. **Created and automated anti-phishing and security test scenarios. **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming a go-to person for HTTPS and SSL. **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases. **Ensured that new releases of the core product did not break older API versions through gold files and automated testing. **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)]. **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops. ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support. **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them. **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems. **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system. **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions. **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money. **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote. **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer. **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS. **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs. **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall. **Administered databases, servers, and the organization's backup system. ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees. **Helped Ariesnet build their secure intranet system using PHP and MySQL. **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software. ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]]. ***Provided in-person network and computer support to students living in the university's residence halls. *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI). ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project. ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service. **Worked with wide-area network configurations. **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers. ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] d5cdf667805897b0ffa727f932e1cb23c18b7594 2184 2183 2009-08-24T01:22:51Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Networks:''' [http://www.linkedin.com/in/meowmeow LinkedIn], [http://www.facebook.com/slawrance Facebook] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.salesforce.com/ Salesforce.com]||Web-based business software platform and suite of integrated business applications. For Salesforce.com, I wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests, improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization, built a security testing framework for package access controls, enhanced an internal production server testing tool's user interface and configuration system, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, added per-window screenshots to an internal testing tool by extending Selenium with JNI native code, and ensured that new releases of the core product did not break older API versions. I also ensured that the software produced by my teams functioned properly through automated and manual testing.||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:Selenium}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}||large||2007-2009 |- |[[Reggie/CIS]]||A 200-user multi-tenant three-tiered HIV/AIDS client database system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used.||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Donor and fundraising event management system used by the San Francisco AIDS Foundation. I migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization. In this project, I integrated a Windows-based three-dimensional visualization program into an Eclipse view, kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project, and automated our data collection and reporting processes to minimize project overhead work. This group project involved four other students -- two whom also work at Salesforce.com -- and served as a laboratory for us to directly apply coursework to a software project with a real client throughout our software engineering masters' programs.||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project.||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments.||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features.||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web.||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||Intranet system for Ariesnet, Inc. During the Summer of 1999, I helped shape the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments.||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind.||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,607||2005-2008 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage.||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface.||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel.||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file.||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system.||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon.||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door.||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server.||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list].||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS].||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans.||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction.||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed.||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||Web site for the [http://web.bryant.edu/~pride/ Bryant PRIDE] LGBT group. In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced the web site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}.||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on.||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface.||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School.||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context.||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95].||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2.||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI].||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays.||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments.||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular.||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts.||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows.||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete.||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking.||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards.||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}.||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own.||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities.||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS.||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]].||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)].||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished.||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies ![http://en.wikipedia.org/wiki/Lines_of_code SLOC] !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build.|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt.|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers.||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions.||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list].||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant.||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon significantly. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: Core Infrastructure, Security, and API Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure. A security research firm later commended Salesforce.com's security, saying that they couldn't find any XSS or cross site request forgery (CSRF) vulnerabilities despite looking for them over the course of several days. **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization. **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls], which helped quickly bring that feature to market with confidence in its quality and security. **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending. **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce]. **Enhanced the user interface of, added Apache Ant build files to, and significantly improved the configuration system of an internal production testing tool that is used by multiple teams. **Created and automated anti-phishing and security test scenarios. **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming a go-to person for HTTPS and SSL. **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases. **Ensured that new releases of the core product did not break older API versions through gold files and automated testing. **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)]. **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops. ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support. **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them. **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems. **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system. **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions. **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money. **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote. **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer. **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS. **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs. **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall. **Administered databases, servers, and the organization's backup system. ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees. **Helped Ariesnet build their secure intranet system using PHP and MySQL. **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software. ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]]. ***Provided in-person network and computer support to students living in the university's residence halls. *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI). ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project. ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service. **Worked with wide-area network configurations. **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers. ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 3d7f583d3b5dc2ba44820916df6fecf6f5c0e945 2185 2184 2009-08-24T01:25:02Z Stevenlawrance 1 /* Software Project Experience */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Networks:''' [http://www.linkedin.com/in/meowmeow LinkedIn], [http://www.facebook.com/slawrance Facebook] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.salesforce.com/ Salesforce.com]||Web-based business software platform and suite of integrated business applications. For Salesforce.com, I wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests, improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization, built a security testing framework for package access controls, enhanced an internal production server testing tool's user interface and configuration system, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, added per-window screenshots to an internal testing tool by extending Selenium with JNI native code, and ensured that new releases of the core product did not break older API versions. I also ensured that the software produced by my teams functioned properly through automated and manual testing.||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:Selenium}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}||large||2007-2009 |- |[[Reggie/CIS]]||A 200-user multi-tenant three-tiered HIV/AIDS client database system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used.||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Donor and fundraising event management system used by the San Francisco AIDS Foundation. I migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization. In this project, I integrated a Windows-based three-dimensional visualization program into an Eclipse view, kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project, and automated our data collection and reporting processes to minimize project overhead work. This group project involved four other students -- two whom also work at Salesforce.com -- and served as a laboratory for us to directly apply coursework to a software project with a real client throughout our software engineering masters' programs.||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project.||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments.||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features.||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web.||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||Intranet system for Ariesnet, Inc. During the Summer of 1999, I helped shape the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments.||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind.||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,607||2005-2008 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage.||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface.||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel.||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file.||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system.||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon.||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door.||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server.||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list].||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS].||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans.||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction.||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed.||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||Web site for the [http://web.bryant.edu/~pride/ Bryant PRIDE] LGBT group. In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced the web site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}.||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on.||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface.||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School.||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context.||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95].||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2.||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI].||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays.||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments.||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular.||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts.||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows.||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete.||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking.||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards.||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}.||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own.||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities.||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS.||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]].||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)].||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished.||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build.|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt.|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers.||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions.||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list].||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant.||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon significantly. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: Core Infrastructure, Security, and API Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure. A security research firm later commended Salesforce.com's security, saying that they couldn't find any XSS or cross site request forgery (CSRF) vulnerabilities despite looking for them over the course of several days. **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization. **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls], which helped quickly bring that feature to market with confidence in its quality and security. **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending. **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce]. **Enhanced the user interface of, added Apache Ant build files to, and significantly improved the configuration system of an internal production testing tool that is used by multiple teams. **Created and automated anti-phishing and security test scenarios. **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming a go-to person for HTTPS and SSL. **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases. **Ensured that new releases of the core product did not break older API versions through gold files and automated testing. **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)]. **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops. ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support. **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them. **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems. **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system. **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions. **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money. **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote. **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer. **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS. **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs. **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall. **Administered databases, servers, and the organization's backup system. ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees. **Helped Ariesnet build their secure intranet system using PHP and MySQL. **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software. ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]]. ***Provided in-person network and computer support to students living in the university's residence halls. *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI). ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project. ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service. **Worked with wide-area network configurations. **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers. ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] b6a232765f6475315cbeec7bad07dc83167f8af4 2186 2185 2009-08-24T01:27:13Z Stevenlawrance 1 /* Salesforce.com */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Networks:''' [http://www.linkedin.com/in/meowmeow LinkedIn], [http://www.facebook.com/slawrance Facebook] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.salesforce.com/ Salesforce.com]||Web-based business software platform and suite of integrated business applications. For Salesforce.com, I wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests, improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization, built a security testing framework for package access controls, enhanced an internal production server testing tool's user interface and configuration system, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, added per-window screenshots to an internal testing tool by extending Selenium with JNI native code, and ensured that new releases of the core product did not break older API versions. I also ensured that the software produced by my teams functioned properly through automated and manual testing.||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:Selenium}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}||large||2007-2009 |- |[[Reggie/CIS]]||A 200-user multi-tenant three-tiered HIV/AIDS client database system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used.||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Donor and fundraising event management system used by the San Francisco AIDS Foundation. I migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization. In this project, I integrated a Windows-based three-dimensional visualization program into an Eclipse view, kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project, and automated our data collection and reporting processes to minimize project overhead work. This group project involved four other students -- two whom also work at Salesforce.com -- and served as a laboratory for us to directly apply coursework to a software project with a real client throughout our software engineering masters' programs.||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project.||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments.||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features.||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web.||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||Intranet system for Ariesnet, Inc. During the Summer of 1999, I helped shape the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments.||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind.||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,607||2005-2008 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage.||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface.||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel.||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file.||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system.||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon.||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door.||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server.||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list].||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS].||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans.||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction.||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed.||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||Web site for the [http://web.bryant.edu/~pride/ Bryant PRIDE] LGBT group. In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced the web site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}.||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on.||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface.||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School.||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context.||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95].||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2.||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI].||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays.||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments.||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular.||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts.||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows.||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete.||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking.||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards.||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}.||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own.||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities.||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS.||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]].||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)].||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished.||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build.|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt.|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers.||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions.||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list].||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant.||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon significantly. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: Core Infrastructure, Security, and API Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure. A security research firm later commended Salesforce.com's security, saying that they couldn't find any XSS or cross site request forgery (CSRF) vulnerabilities, despite looking for them over the course of several days. **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization. **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls], which helped quickly bring that feature to market with confidence in its quality and security. **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending. **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce]. **Enhanced the user interface of, added Apache Ant build files to, and significantly improved the configuration system of an internal production testing tool that is used by multiple teams. **Created and automated anti-phishing and security test scenarios. **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming a go-to person for HTTPS and SSL. **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases. **Ensured that new releases of the core product did not break older API versions through gold files and automated testing. **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)]. **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops. ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support. **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them. **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems. **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system. **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions. **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money. **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote. **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer. **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS. **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs. **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall. **Administered databases, servers, and the organization's backup system. ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees. **Helped Ariesnet build their secure intranet system using PHP and MySQL. **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software. ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]]. ***Provided in-person network and computer support to students living in the university's residence halls. *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI). ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project. ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service. **Worked with wide-area network configurations. **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers. ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 379f16301ea21c610af99b2f45ba2dbe6b2cbec3 2187 2186 2009-08-24T01:43:58Z Stevenlawrance 1 /* Salesforce.com */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Networks:''' [http://www.linkedin.com/in/meowmeow LinkedIn], [http://www.facebook.com/slawrance Facebook] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.salesforce.com/ Salesforce.com]||Web-based business software platform and suite of integrated business applications. For Salesforce.com, I wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests, improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization, built a security testing framework for package access controls, enhanced an internal production server testing tool's user interface and configuration system, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, added per-window screenshots to an internal testing tool by extending Selenium with JNI native code, and ensured that new releases of the core product did not break older API versions. I also ensured that the software produced by my teams functioned properly through automated and manual testing.||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:Selenium}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}||large||2007-2009 |- |[[Reggie/CIS]]||A 200-user multi-tenant three-tiered HIV/AIDS client database system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used.||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Donor and fundraising event management system used by the San Francisco AIDS Foundation. I migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization. In this project, I integrated a Windows-based three-dimensional visualization program into an Eclipse view, kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project, and automated our data collection and reporting processes to minimize project overhead work. This group project involved four other students -- two whom also work at Salesforce.com -- and served as a laboratory for us to directly apply coursework to a software project with a real client throughout our software engineering masters' programs.||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project.||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments.||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features.||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web.||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||Intranet system for Ariesnet, Inc. During the Summer of 1999, I helped shape the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments.||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind.||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,607||2005-2008 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage.||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface.||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel.||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file.||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system.||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon.||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door.||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server.||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list].||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS].||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans.||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction.||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed.||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||Web site for the [http://web.bryant.edu/~pride/ Bryant PRIDE] LGBT group. In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced the web site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}.||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on.||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface.||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School.||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context.||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95].||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2.||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI].||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays.||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments.||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular.||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts.||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows.||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete.||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking.||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards.||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}.||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own.||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities.||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS.||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]].||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)].||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished.||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build.|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt.|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers.||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions.||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list].||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant.||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon significantly. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: Core Infrastructure, Security, and API Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure. A security research firm later commended Salesforce.com's security, saying that they couldn't find any XSS or cross site request forgery (CSRF) vulnerabilities, despite looking for them over the course of several days. **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending. **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming a go-to person for HTTPS and SSL. **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to ultimately increase test parallelization. **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls], which helped quickly bring that feature to market with confidence in its quality and security. **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce]. **Enhanced the user interface of, added Apache Ant build files to, significantly improved the configuration system of, and added multiple-window browser screenshots to an internal production testing tool that is used by multiple teams. **Created and automated anti-phishing and security test scenarios. **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases. **Ensured that new releases of the core product did not break older API versions through gold files and automated testing. **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)]. **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops. ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support. **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them. **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems. **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system. **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions. **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money. **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote. **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer. **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS. **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs. **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall. **Administered databases, servers, and the organization's backup system. ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees. **Helped Ariesnet build their secure intranet system using PHP and MySQL. **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software. ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]]. ***Provided in-person network and computer support to students living in the university's residence halls. *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI). ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project. ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service. **Worked with wide-area network configurations. **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers. ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 1df64b10257fdeff1a99d7ff54ecc9bea5c025b3 2188 2187 2009-08-24T01:48:25Z Stevenlawrance 1 /* Salesforce.com */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Networks:''' [http://www.linkedin.com/in/meowmeow LinkedIn], [http://www.facebook.com/slawrance Facebook] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.salesforce.com/ Salesforce.com]||Web-based business software platform and suite of integrated business applications. For Salesforce.com, I wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests, improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization, built a security testing framework for package access controls, enhanced an internal production server testing tool's user interface and configuration system, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, added per-window screenshots to an internal testing tool by extending Selenium with JNI native code, and ensured that new releases of the core product did not break older API versions. I also ensured that the software produced by my teams functioned properly through automated and manual testing.||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:Selenium}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}||large||2007-2009 |- |[[Reggie/CIS]]||A 200-user multi-tenant three-tiered HIV/AIDS client database system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used.||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Donor and fundraising event management system used by the San Francisco AIDS Foundation. I migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization. In this project, I integrated a Windows-based three-dimensional visualization program into an Eclipse view, kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project, and automated our data collection and reporting processes to minimize project overhead work. This group project involved four other students -- two whom also work at Salesforce.com -- and served as a laboratory for us to directly apply coursework to a software project with a real client throughout our software engineering masters' programs.||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project.||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments.||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features.||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web.||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||Intranet system for Ariesnet, Inc. During the Summer of 1999, I helped shape the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments.||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind.||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,607||2005-2008 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage.||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface.||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel.||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file.||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system.||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon.||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door.||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server.||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list].||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS].||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans.||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction.||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed.||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||Web site for the [http://web.bryant.edu/~pride/ Bryant PRIDE] LGBT group. In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced the web site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}.||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on.||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface.||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School.||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context.||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95].||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2.||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI].||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays.||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments.||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular.||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts.||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows.||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete.||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking.||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards.||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}.||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own.||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities.||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS.||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]].||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)].||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished.||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build.|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt.|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers.||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions.||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list].||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant.||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon significantly. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: Core Infrastructure, Security, and API Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure. A security research firm later commended Salesforce.com's security, saying that they couldn't find any XSS or cross site request forgery (CSRF) vulnerabilities, despite looking for them over the course of several days. **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending. **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming a go-to person for HTTPS and SSL. **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization. **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls], which helped quickly bring that feature to market with confidence in its quality and security. **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce]. **Enhanced the user interface of, added Apache Ant build files to, significantly improved the configuration system of, and added multiple-window browser screenshots to an internal production testing tool that is used by multiple teams. **Created and automated anti-phishing and security test scenarios. **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases. **Ensured that new releases of the core product did not break older API versions through gold files and automated testing. **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)]. **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops. ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support. **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them. **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems. **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system. **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions. **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money. **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote. **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer. **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS. **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs. **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall. **Administered databases, servers, and the organization's backup system. ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees. **Helped Ariesnet build their secure intranet system using PHP and MySQL. **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software. ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]]. ***Provided in-person network and computer support to students living in the university's residence halls. *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI). ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project. ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service. **Worked with wide-area network configurations. **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers. ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] e7558b60d8d06097898db8eef1f0f485ce24af2a 2189 2188 2009-08-24T01:52:22Z Stevenlawrance 1 /* Education and Training */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Networks:''' [http://www.linkedin.com/in/meowmeow LinkedIn], [http://www.facebook.com/slawrance Facebook] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.salesforce.com/ Salesforce.com]||Web-based business software platform and suite of integrated business applications. For Salesforce.com, I wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests, improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization, built a security testing framework for package access controls, enhanced an internal production server testing tool's user interface and configuration system, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, added per-window screenshots to an internal testing tool by extending Selenium with JNI native code, and ensured that new releases of the core product did not break older API versions. I also ensured that the software produced by my teams functioned properly through automated and manual testing.||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:Selenium}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}||large||2007-2009 |- |[[Reggie/CIS]]||A 200-user multi-tenant three-tiered HIV/AIDS client database system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used.||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Donor and fundraising event management system used by the San Francisco AIDS Foundation. I migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization. In this project, I integrated a Windows-based three-dimensional visualization program into an Eclipse view, kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project, and automated our data collection and reporting processes to minimize project overhead work. This group project involved four other students -- two whom also work at Salesforce.com -- and served as a laboratory for us to directly apply coursework to a software project with a real client throughout our software engineering masters' programs.||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project.||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments.||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features.||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web.||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||Intranet system for Ariesnet, Inc. During the Summer of 1999, I helped shape the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments.||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind.||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,607||2005-2008 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage.||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface.||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel.||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file.||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system.||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon.||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door.||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server.||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list].||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS].||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans.||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction.||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed.||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||Web site for the [http://web.bryant.edu/~pride/ Bryant PRIDE] LGBT group. In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced the web site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}.||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on.||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface.||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School.||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context.||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95].||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2.||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI].||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays.||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments.||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular.||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts.||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows.||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete.||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking.||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards.||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}.||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own.||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities.||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS.||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]].||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)].||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished.||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build.|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt.|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers.||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions.||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list].||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant.||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon significantly. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: Core Infrastructure, Security, and API Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure. A security research firm later commended Salesforce.com's security, saying that they couldn't find any XSS or cross site request forgery (CSRF) vulnerabilities, despite looking for them over the course of several days. **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending. **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming a go-to person for HTTPS and SSL. **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization. **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls], which helped quickly bring that feature to market with confidence in its quality and security. **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce]. **Enhanced the user interface of, added Apache Ant build files to, significantly improved the configuration system of, and added multiple-window browser screenshots to an internal production testing tool that is used by multiple teams. **Created and automated anti-phishing and security test scenarios. **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases. **Ensured that new releases of the core product did not break older API versions through gold files and automated testing. **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)]. **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops. ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support. **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them. **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems. **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system. **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions. **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money. **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote. **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer. **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS. **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs. **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall. **Administered databases, servers, and the organization's backup system. ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees. **Helped Ariesnet build their secure intranet system using PHP and MySQL. **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software. ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]]. ***Provided in-person network and computer support to students living in the university's residence halls. *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI). ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project. ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service. **Worked with wide-area network configurations. **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers. ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame. **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error. **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project. *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] e776ba9527803a16037ee0d87351c64e9e30c96c 2190 2189 2009-08-24T01:54:43Z Stevenlawrance 1 /* Carnegie Mellon University */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Networks:''' [http://www.linkedin.com/in/meowmeow LinkedIn], [http://www.facebook.com/slawrance Facebook] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.salesforce.com/ Salesforce.com]||Web-based business software platform and suite of integrated business applications. For Salesforce.com, I wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests, improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization, built a security testing framework for package access controls, enhanced an internal production server testing tool's user interface and configuration system, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, added per-window screenshots to an internal testing tool by extending Selenium with JNI native code, and ensured that new releases of the core product did not break older API versions. I also ensured that the software produced by my teams functioned properly through automated and manual testing.||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:Selenium}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}||large||2007-2009 |- |[[Reggie/CIS]]||A 200-user multi-tenant three-tiered HIV/AIDS client database system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used.||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Donor and fundraising event management system used by the San Francisco AIDS Foundation. I migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization. In this project, I integrated a Windows-based three-dimensional visualization program into an Eclipse view, kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project, and automated our data collection and reporting processes to minimize project overhead work. This group project involved four other students -- two whom also work at Salesforce.com -- and served as a laboratory for us to directly apply coursework to a software project with a real client throughout our software engineering masters' programs.||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project.||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments.||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features.||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web.||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||Intranet system for Ariesnet, Inc. During the Summer of 1999, I helped shape the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments.||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind.||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,607||2005-2008 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage.||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface.||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel.||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file.||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system.||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon.||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door.||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server.||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list].||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS].||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans.||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction.||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed.||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||Web site for the [http://web.bryant.edu/~pride/ Bryant PRIDE] LGBT group. In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced the web site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}.||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on.||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface.||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School.||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context.||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95].||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2.||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI].||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays.||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments.||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular.||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts.||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows.||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete.||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking.||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards.||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}.||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own.||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities.||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS.||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]].||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)].||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished.||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build.|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt.|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers.||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions.||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list].||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant.||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon significantly. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: Core Infrastructure, Security, and API Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure. A security research firm later commended Salesforce.com's security, saying that they couldn't find any XSS or cross site request forgery (CSRF) vulnerabilities, despite looking for them over the course of several days. **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending. **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming a go-to person for HTTPS and SSL. **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization. **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls], which helped quickly bring that feature to market with confidence in its quality and security. **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce]. **Enhanced the user interface of, added Apache Ant build files to, significantly improved the configuration system of, and added multiple-window browser screenshots to an internal production testing tool that is used by multiple teams. **Created and automated anti-phishing and security test scenarios. **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases. **Ensured that new releases of the core product did not break older API versions through gold files and automated testing. **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)]. **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops. ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support. **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them. **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems. **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system. **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions. **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money. **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote. **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer. **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS. **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs. **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall. **Administered databases, servers, and the organization's backup system. ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees. **Helped Ariesnet build their secure intranet system using PHP and MySQL. **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software. ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]]. ***Provided in-person network and computer support to students living in the university's residence halls. *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI). ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project. ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service. **Worked with wide-area network configurations. **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers. ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager and, via rotation, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame. **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error. **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project. *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] b34d321eb0f44663f9cc76fc032bc1e263270360 2191 2190 2009-08-24T01:55:13Z Stevenlawrance 1 /* Grapevine-Colleyville Independent School District */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Networks:''' [http://www.linkedin.com/in/meowmeow LinkedIn], [http://www.facebook.com/slawrance Facebook] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.salesforce.com/ Salesforce.com]||Web-based business software platform and suite of integrated business applications. For Salesforce.com, I wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests, improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization, built a security testing framework for package access controls, enhanced an internal production server testing tool's user interface and configuration system, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, added per-window screenshots to an internal testing tool by extending Selenium with JNI native code, and ensured that new releases of the core product did not break older API versions. I also ensured that the software produced by my teams functioned properly through automated and manual testing.||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:Selenium}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}||large||2007-2009 |- |[[Reggie/CIS]]||A 200-user multi-tenant three-tiered HIV/AIDS client database system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used.||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Donor and fundraising event management system used by the San Francisco AIDS Foundation. I migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization. In this project, I integrated a Windows-based three-dimensional visualization program into an Eclipse view, kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project, and automated our data collection and reporting processes to minimize project overhead work. This group project involved four other students -- two whom also work at Salesforce.com -- and served as a laboratory for us to directly apply coursework to a software project with a real client throughout our software engineering masters' programs.||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project.||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments.||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features.||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web.||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||Intranet system for Ariesnet, Inc. During the Summer of 1999, I helped shape the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments.||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind.||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,607||2005-2008 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage.||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface.||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel.||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file.||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system.||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon.||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door.||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server.||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list].||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS].||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans.||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction.||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed.||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||Web site for the [http://web.bryant.edu/~pride/ Bryant PRIDE] LGBT group. In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced the web site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}.||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on.||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface.||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School.||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context.||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95].||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2.||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI].||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays.||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments.||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular.||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts.||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows.||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete.||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking.||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards.||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}.||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own.||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities.||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS.||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]].||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)].||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished.||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build.|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt.|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers.||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions.||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list].||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant.||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon significantly. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: Core Infrastructure, Security, and API Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure. A security research firm later commended Salesforce.com's security, saying that they couldn't find any XSS or cross site request forgery (CSRF) vulnerabilities, despite looking for them over the course of several days. **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending. **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming a go-to person for HTTPS and SSL. **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization. **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls], which helped quickly bring that feature to market with confidence in its quality and security. **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce]. **Enhanced the user interface of, added Apache Ant build files to, significantly improved the configuration system of, and added multiple-window browser screenshots to an internal production testing tool that is used by multiple teams. **Created and automated anti-phishing and security test scenarios. **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases. **Ensured that new releases of the core product did not break older API versions through gold files and automated testing. **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)]. **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops. ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support. **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them. **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems. **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system. **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions. **Obviated a need for Crystal Reports by implementing web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money. **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote. **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer. **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS. **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs. **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall. **Administered databases, servers, and the organization's backup system. ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees. **Helped Ariesnet build their secure intranet system using PHP and MySQL. **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software. ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]]. ***Provided in-person network and computer support to students living in the university's residence halls. *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI). ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project. ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager and, via rotation, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame. **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error. **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project. *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] c640f3c1f81372003b954f3ff64f8e75854fbcfc 2192 2191 2009-08-24T01:57:44Z Stevenlawrance 1 /* Employment History */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Networks:''' [http://www.linkedin.com/in/meowmeow LinkedIn], [http://www.facebook.com/slawrance Facebook] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.salesforce.com/ Salesforce.com]||Web-based business software platform and suite of integrated business applications. For Salesforce.com, I wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests, improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization, built a security testing framework for package access controls, enhanced an internal production server testing tool's user interface and configuration system, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, added per-window screenshots to an internal testing tool by extending Selenium with JNI native code, and ensured that new releases of the core product did not break older API versions. I also ensured that the software produced by my teams functioned properly through automated and manual testing.||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:Selenium}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}||large||2007-2009 |- |[[Reggie/CIS]]||A 200-user multi-tenant three-tiered HIV/AIDS client database system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used.||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Donor and fundraising event management system used by the San Francisco AIDS Foundation. I migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization. In this project, I integrated a Windows-based three-dimensional visualization program into an Eclipse view, kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project, and automated our data collection and reporting processes to minimize project overhead work. This group project involved four other students -- two whom also work at Salesforce.com -- and served as a laboratory for us to directly apply coursework to a software project with a real client throughout our software engineering masters' programs.||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project.||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments.||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features.||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web.||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||Intranet system for Ariesnet, Inc. During the Summer of 1999, I helped shape the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments.||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind.||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,607||2005-2008 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage.||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface.||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel.||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF file.||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system.||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon.||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door.||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server.||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list].||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS].||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans.||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction.||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed.||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||Web site for the [http://web.bryant.edu/~pride/ Bryant PRIDE] LGBT group. In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced the web site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}.||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on.||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface.||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School.||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context.||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95].||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2.||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI].||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays.||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments.||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular.||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts.||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows.||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete.||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking.||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards.||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}.||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own.||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities.||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS.||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]].||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)].||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished.||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build.|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt.|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3.|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers.||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions.||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list].||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant.||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon significantly. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: Core Infrastructure, Security, and API Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure. A security research firm later commended Salesforce.com's security, saying that they couldn't find any XSS or cross site request forgery (CSRF) vulnerabilities, despite looking for them over the course of several days. **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming a go-to person for HTTPS and SSL **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls], which helped quickly bring that feature to market with confidence in its quality and security **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface of, added Apache Ant build files to, significantly improved the configuration system of, and added multiple-window browser screenshots to an internal production testing tool that is used by multiple teams **Created and automated anti-phishing and security test scenarios **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support. **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based [[PDF Access Reports|PDF reports]] using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager and, via rotation, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame. **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error. **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project. *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 09a9ed5c032d831f5f4940668c44e2443b61aff7 2193 2192 2009-08-24T02:02:56Z Stevenlawrance 1 /* Software Project Experience */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Interests|Interests]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Networks:''' [http://www.linkedin.com/in/meowmeow LinkedIn], [http://www.facebook.com/slawrance Facebook] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.salesforce.com/ Salesforce.com]||Web-based business software platform and suite of integrated business applications. For Salesforce.com, I wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests, improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization, built a security testing framework for package access controls, enhanced an internal production server testing tool's user interface and configuration system, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, added per-window screenshots to an internal testing tool by extending Selenium with JNI native code, and ensured that new releases of the core product did not break older API versions. I also ensured that the software produced by my teams functioned properly through automated and manual testing.||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:Selenium}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}||large||2007-2009 |- |[[Reggie/CIS]]||A 200-user multi-tenant three-tiered HIV/AIDS client database system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used.||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Donor and fundraising event management system used by the San Francisco AIDS Foundation. I migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization. In this project, I integrated a Windows-based three-dimensional visualization program into an Eclipse view, kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project, and automated our data collection and reporting processes to minimize project overhead work. This group project involved four other students -- two whom also work at Salesforce.com -- and served as a laboratory for us to directly apply coursework to a software project with a real client throughout our software engineering masters' programs.||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project.||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features.||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||Intranet system for Ariesnet, Inc. During the Summer of 1999, I helped shape the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments.||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind.||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,607||2005-2008 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface.||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel.||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF or an IIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system.||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server.||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list].||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS].||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction.||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||Web site for the [http://web.bryant.edu/~pride/ Bryant PRIDE] LGBT group. In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced the web site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}.||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface.||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context.||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95].||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI].||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete.||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own.||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities.||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished.||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list].||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant.||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon significantly. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: Core Infrastructure, Security, and API Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure. A security research firm later commended Salesforce.com's security, saying that they couldn't find any XSS or cross site request forgery (CSRF) vulnerabilities, despite looking for them over the course of several days. **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming a go-to person for HTTPS and SSL **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls], which helped quickly bring that feature to market with confidence in its quality and security **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface of, added Apache Ant build files to, significantly improved the configuration system of, and added multiple-window browser screenshots to an internal production testing tool that is used by multiple teams **Created and automated anti-phishing and security test scenarios **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support. **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based [[PDF Access Reports|PDF reports]] using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager and, via rotation, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame. **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error. **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project. *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 9cb1e0edb2a60617133bf8fbf1a5000a500bd865 2195 2193 2009-09-19T20:21:33Z Stevenlawrance 1 wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software Project Experience|Software Project Experience]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Networks:''' [http://www.linkedin.com/in/meowmeow LinkedIn], [http://www.facebook.com/slawrance Facebook] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.salesforce.com/ Salesforce.com]||Web-based business software platform and suite of integrated business applications. For Salesforce.com, I wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests, improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization, built a security testing framework for package access controls, enhanced an internal production server testing tool's user interface and configuration system, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, added per-window screenshots to an internal testing tool by extending Selenium with JNI native code, and ensured that new releases of the core product did not break older API versions. I also ensured that the software produced by my teams functioned properly through automated and manual testing.||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:Selenium}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}||large||2007-2009 |- |[[Reggie/CIS]]||A 200-user multi-tenant three-tiered HIV/AIDS client database system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used.||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Donor and fundraising event management system used by the San Francisco AIDS Foundation. I migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization. In this project, I integrated a Windows-based three-dimensional visualization program into an Eclipse view, kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project, and automated our data collection and reporting processes to minimize project overhead work. This group project involved four other students -- two whom also work at Salesforce.com -- and served as a laboratory for us to directly apply coursework to a software project with a real client throughout our software engineering masters' programs.||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project.||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features.||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||Intranet system for Ariesnet, Inc. During the Summer of 1999, I helped shape the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments.||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind.||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,607||2005-2008 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface.||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel.||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF or an IIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system.||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server.||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list].||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS].||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction.||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||Web site for the [http://web.bryant.edu/~pride/ Bryant PRIDE] LGBT group. In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced the web site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}.||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface.||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context.||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95].||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI].||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete.||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own.||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities.||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished.||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list].||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant.||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon significantly. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: Core Infrastructure, Security, and API Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure. A security research firm later commended Salesforce.com's security, saying that they couldn't find any XSS or cross site request forgery (CSRF) vulnerabilities, despite looking for them over the course of several days. **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming a go-to person for HTTPS and SSL **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls], which helped quickly bring that feature to market with confidence in its quality and security **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface of, added Apache Ant build files to, significantly improved the configuration system of, and added multiple-window browser screenshots to an internal production testing tool that is used by multiple teams **Created and automated anti-phishing and security test scenarios **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support. **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based [[PDF Access Reports|PDF reports]] using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager and, via rotation, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame. **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error. **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project. *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] b32d3a815505a94b2262bf6e6b670410c2af1fb8 2196 2195 2009-09-19T20:26:33Z Stevenlawrance 1 wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Team software|Software Built in a Team]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software that I created|Software Built by Just Me]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Networks:''' [http://www.linkedin.com/in/meowmeow LinkedIn], [http://www.facebook.com/slawrance Facebook] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.salesforce.com/ Salesforce.com]||Web-based business software platform and suite of integrated business applications. For Salesforce.com, I wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests, improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization, built a security testing framework for package access controls, enhanced an internal production server testing tool's user interface and configuration system, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, added per-window screenshots to an internal testing tool by extending Selenium with JNI native code, and ensured that new releases of the core product did not break older API versions. I also ensured that the software produced by my teams functioned properly through automated and manual testing.||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:Selenium}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}||large||2007-2009 |- |[[Reggie/CIS]]||A 200-user multi-tenant three-tiered HIV/AIDS client database system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used.||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Donor and fundraising event management system used by the San Francisco AIDS Foundation. I migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization. In this project, I integrated a Windows-based three-dimensional visualization program into an Eclipse view, kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project, and automated our data collection and reporting processes to minimize project overhead work. This group project involved four other students -- two whom also work at Salesforce.com -- and served as a laboratory for us to directly apply coursework to a software project with a real client throughout our software engineering masters' programs.||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project.||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features.||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||Intranet system for Ariesnet, Inc. During the Summer of 1999, I helped shape the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments.||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind.||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,607||2005-2008 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface.||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel.||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF or an IIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system.||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server.||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list].||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS].||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction.||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||Web site for the [http://web.bryant.edu/~pride/ Bryant PRIDE] LGBT group. In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced the web site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}.||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface.||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context.||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95].||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI].||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete.||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own.||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities.||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished.||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list].||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant.||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon significantly. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: Core Infrastructure, Security, and API Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure. A security research firm later commended Salesforce.com's security, saying that they couldn't find any XSS or cross site request forgery (CSRF) vulnerabilities, despite looking for them over the course of several days. **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming a go-to person for HTTPS and SSL **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls], which helped quickly bring that feature to market with confidence in its quality and security **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface of, added Apache Ant build files to, significantly improved the configuration system of, and added multiple-window browser screenshots to an internal production testing tool that is used by multiple teams **Created and automated anti-phishing and security test scenarios **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support. **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based [[PDF Access Reports|PDF reports]] using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager and, via rotation, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame. **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error. **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project. *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 130591a9473572156953ee9351dd174e61bf2069 2200 2196 2010-01-24T18:19:33Z Stevenlawrance 1 /* Team software */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Team software|Software Built in a Team]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software that I created|Software Built by Just Me]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Networks:''' [http://www.linkedin.com/in/meowmeow LinkedIn], [http://www.facebook.com/slawrance Facebook] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.salesforce.com/ Salesforce.com]||Web-based business software platform and suite of integrated business applications. For Salesforce.com, I wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests, improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization, built a security testing framework for package access controls, enhanced an internal production server testing tool's user interface and configuration system, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, added per-window screenshots to an internal testing tool by extending Selenium with JNI native code, and ensured that new releases of the core product did not break older API versions. I also ensured that the software produced by my teams functioned properly through automated and manual testing.||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:Selenium}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}||large||2007-2010 |- |[[Reggie/CIS]]||A 200-user multi-tenant three-tiered HIV/AIDS client database system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used.||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Donor and fundraising event management system used by the San Francisco AIDS Foundation. I migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization. In this project, I integrated a Windows-based three-dimensional visualization program into an Eclipse view, kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project, and automated our data collection and reporting processes to minimize project overhead work. This group project involved four other students -- two whom also work at Salesforce.com -- and served as a laboratory for us to directly apply coursework to a software project with a real client throughout our software engineering masters' programs.||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project.||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features.||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||Intranet system for Ariesnet, Inc. During the Summer of 1999, I helped shape the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments.||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind.||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,607||2005-2008 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface.||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel.||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF or an IIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system.||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server.||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list].||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS].||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction.||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||Web site for the [http://web.bryant.edu/~pride/ Bryant PRIDE] LGBT group. In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced the web site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}.||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface.||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context.||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95].||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI].||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete.||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own.||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities.||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished.||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list].||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant.||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon significantly. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: Core Infrastructure, Security, and API Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure. A security research firm later commended Salesforce.com's security, saying that they couldn't find any XSS or cross site request forgery (CSRF) vulnerabilities, despite looking for them over the course of several days. **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming a go-to person for HTTPS and SSL **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls], which helped quickly bring that feature to market with confidence in its quality and security **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface of, added Apache Ant build files to, significantly improved the configuration system of, and added multiple-window browser screenshots to an internal production testing tool that is used by multiple teams **Created and automated anti-phishing and security test scenarios **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support. **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based [[PDF Access Reports|PDF reports]] using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager and, via rotation, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame. **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error. **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project. *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 718c166051ae054d89b5780523ea264cc6d2b949 2201 2200 2010-01-24T18:19:52Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Team software|Software Built in a Team]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software that I created|Software Built by Just Me]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Networks:''' [http://www.linkedin.com/in/meowmeow LinkedIn], [http://www.facebook.com/slawrance Facebook] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.salesforce.com/ Salesforce.com]||Web-based business software platform and suite of integrated business applications. For Salesforce.com, I wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests, improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization, built a security testing framework for package access controls, enhanced an internal production server testing tool's user interface and configuration system, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, added per-window screenshots to an internal testing tool by extending Selenium with JNI native code, and ensured that new releases of the core product did not break older API versions. I also ensured that the software produced by my teams functioned properly through automated and manual testing.||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:Selenium}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}||large||2007-2010 |- |[[Reggie/CIS]]||A 200-user multi-tenant three-tiered HIV/AIDS client database system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used.||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Donor and fundraising event management system used by the San Francisco AIDS Foundation. I migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization. In this project, I integrated a Windows-based three-dimensional visualization program into an Eclipse view, kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project, and automated our data collection and reporting processes to minimize project overhead work. This group project involved four other students -- two whom also work at Salesforce.com -- and served as a laboratory for us to directly apply coursework to a software project with a real client throughout our software engineering masters' programs.||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project.||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features.||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||Intranet system for Ariesnet, Inc. During the Summer of 1999, I helped shape the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments.||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind.||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,607||2005-2010 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface.||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel.||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF or an IIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system.||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server.||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list].||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS].||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction.||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||Web site for the [http://web.bryant.edu/~pride/ Bryant PRIDE] LGBT group. In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced the web site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}.||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface.||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context.||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95].||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI].||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete.||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own.||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities.||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished.||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list].||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant.||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon significantly. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: Core Infrastructure, Security, and API Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure. A security research firm later commended Salesforce.com's security, saying that they couldn't find any XSS or cross site request forgery (CSRF) vulnerabilities, despite looking for them over the course of several days. **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming a go-to person for HTTPS and SSL **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls], which helped quickly bring that feature to market with confidence in its quality and security **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface of, added Apache Ant build files to, significantly improved the configuration system of, and added multiple-window browser screenshots to an internal production testing tool that is used by multiple teams **Created and automated anti-phishing and security test scenarios **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support. **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based [[PDF Access Reports|PDF reports]] using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager and, via rotation, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame. **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error. **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project. *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 02faee5e5a9d9aefc6c34b4a2a05647401cde090 2206 2201 2010-05-14T16:48:43Z Stevenlawrance 1 wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Team software|Software Built in a Team]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software that I created|Software Built by Just Me]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Network:''' [http://www.linkedin.com/in/meowmeow LinkedIn] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.salesforce.com/ Salesforce.com]||Web-based business software platform and suite of integrated business applications. For Salesforce.com, I wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests, improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization, built a security testing framework for package access controls, enhanced an internal production server testing tool's user interface and configuration system, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, added per-window screenshots to an internal testing tool by extending Selenium with JNI native code, and ensured that new releases of the core product did not break older API versions. I also ensured that the software produced by my teams functioned properly through automated and manual testing.||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:Selenium}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}||large||2007-2010 |- |[[Reggie/CIS]]||A 200-user multi-tenant three-tiered HIV/AIDS client database system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used.||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Donor and fundraising event management system used by the San Francisco AIDS Foundation. I migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization. In this project, I integrated a Windows-based three-dimensional visualization program into an Eclipse view, kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project, and automated our data collection and reporting processes to minimize project overhead work. This group project involved four other students -- two whom also work at Salesforce.com -- and served as a laboratory for us to directly apply coursework to a software project with a real client throughout our software engineering masters' programs.||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project.||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features.||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||Intranet system for Ariesnet, Inc. During the Summer of 1999, I helped shape the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments.||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind.||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,607||2005-2010 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface.||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel.||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF or an IIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system.||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server.||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list].||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS].||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction.||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||Web site for the [http://web.bryant.edu/~pride/ Bryant PRIDE] LGBT group. In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced the web site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}.||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface.||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context.||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95].||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI].||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete.||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own.||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities.||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished.||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list].||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant.||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon significantly. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: Core Infrastructure, Security, and API Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure. A security research firm later commended Salesforce.com's security, saying that they couldn't find any XSS or cross site request forgery (CSRF) vulnerabilities, despite looking for them over the course of several days. **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming a go-to person for HTTPS and SSL **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls], which helped quickly bring that feature to market with confidence in its quality and security **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface of, added Apache Ant build files to, significantly improved the configuration system of, and added multiple-window browser screenshots to an internal production testing tool that is used by multiple teams **Created and automated anti-phishing and security test scenarios **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support. **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based [[PDF Access Reports|PDF reports]] using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager and, via rotation, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame. **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error. **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project. *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] e0dc9315b06cb20833d95345e93792f3b63a6369 2207 2206 2010-05-16T17:23:44Z Stevenlawrance 1 /* Salesforce.com */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Team software|Software Built in a Team]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software that I created|Software Built by Just Me]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Network:''' [http://www.linkedin.com/in/meowmeow LinkedIn] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.salesforce.com/ Salesforce.com]||Web-based business software platform and suite of integrated business applications. For Salesforce.com, I wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests, improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization, built a security testing framework for package access controls, enhanced an internal production server testing tool's user interface and configuration system, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, added per-window screenshots to an internal testing tool by extending Selenium with JNI native code, and ensured that new releases of the core product did not break older API versions. I also ensured that the software produced by my teams functioned properly through automated and manual testing.||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:Selenium}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}||large||2007-2010 |- |[[Reggie/CIS]]||A 200-user multi-tenant three-tiered HIV/AIDS client database system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used.||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Donor and fundraising event management system used by the San Francisco AIDS Foundation. I migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization. In this project, I integrated a Windows-based three-dimensional visualization program into an Eclipse view, kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project, and automated our data collection and reporting processes to minimize project overhead work. This group project involved four other students -- two whom also work at Salesforce.com -- and served as a laboratory for us to directly apply coursework to a software project with a real client throughout our software engineering masters' programs.||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project.||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features.||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||Intranet system for Ariesnet, Inc. During the Summer of 1999, I helped shape the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments.||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind.||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,607||2005-2010 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface.||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel.||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF or an IIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system.||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server.||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list].||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS].||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction.||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||Web site for the [http://web.bryant.edu/~pride/ Bryant PRIDE] LGBT group. In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced the web site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}.||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface.||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context.||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95].||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI].||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete.||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own.||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities.||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished.||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list].||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant.||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon significantly. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: Force.com Sites, Core Infrastructure, Security, and API Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure. A security research firm later commended Salesforce.com's security, saying that they couldn't find any XSS or cross site request forgery (CSRF) vulnerabilities, despite looking for them over the course of several days. **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming a go-to person for HTTPS and SSL **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls], which helped quickly bring that feature to market with confidence in its quality and security **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface of, added Apache Ant build files to, significantly improved the configuration system of, and added multiple-window browser screenshots to an internal production testing tool that is used by multiple teams **Created and automated anti-phishing and security test scenarios **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support. **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based [[PDF Access Reports|PDF reports]] using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager and, via rotation, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame. **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error. **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project. *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 7182f8d1e7fc230d11bc2d5a8f350b6ee65e1f14 2208 2207 2010-05-16T17:25:24Z Stevenlawrance 1 /* Salesforce.com */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Team software|Software Built in a Team]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software that I created|Software Built by Just Me]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Network:''' [http://www.linkedin.com/in/meowmeow LinkedIn] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.salesforce.com/ Salesforce.com]||Web-based business software platform and suite of integrated business applications. For Salesforce.com, I wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests, improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization, built a security testing framework for package access controls, enhanced an internal production server testing tool's user interface and configuration system, helped resolve customer cases related to using the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) with TLS and SSL security, added per-window screenshots to an internal testing tool by extending Selenium with JNI native code, and ensured that new releases of the core product did not break older API versions. I also ensured that the software produced by my teams functioned properly through automated and manual testing.||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:Selenium}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}||large||2007-2010 |- |[[Reggie/CIS]]||A 200-user multi-tenant three-tiered HIV/AIDS client database system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used.||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Donor and fundraising event management system used by the San Francisco AIDS Foundation. I migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization. In this project, I integrated a Windows-based three-dimensional visualization program into an Eclipse view, kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project, and automated our data collection and reporting processes to minimize project overhead work. This group project involved four other students -- two whom also work at Salesforce.com -- and served as a laboratory for us to directly apply coursework to a software project with a real client throughout our software engineering masters' programs.||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project.||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features.||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||Intranet system for Ariesnet, Inc. During the Summer of 1999, I helped shape the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments.||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind.||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,607||2005-2010 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface.||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel.||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF or an IIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system.||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server.||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list].||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS].||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction.||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||Web site for the [http://web.bryant.edu/~pride/ Bryant PRIDE] LGBT group. In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced the web site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}.||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface.||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context.||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95].||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI].||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete.||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own.||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities.||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished.||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list].||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant.||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon significantly. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: [http://developer.force.com/sites Force.com Sites], Core Infrastructure, Security, and [http://wiki.developerforce.com/index.php/Web_Services_API API] Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure. A security research firm later commended Salesforce.com's security, saying that they couldn't find any XSS or cross site request forgery (CSRF) vulnerabilities, despite looking for them over the course of several days. **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming a go-to person for HTTPS and SSL **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls], which helped quickly bring that feature to market with confidence in its quality and security **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface of, added Apache Ant build files to, significantly improved the configuration system of, and added multiple-window browser screenshots to an internal production testing tool that is used by multiple teams **Created and automated anti-phishing and security test scenarios **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support. **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based [[PDF Access Reports|PDF reports]] using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager and, via rotation, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame. **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error. **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project. *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 6221f79941e22a4f0b2c48f5adafe4ddbb013c0b PDF Access Reports 0 1655 2161 2009-07-30T03:35:27Z Stevenlawrance 1 Created page with 'The PDF Access Reports component of [[Reggie/CIS]] enabled its reporting system to generate PDF reports by using Microsoft Access and open-source software. This obviated a need f…' wikitext text/x-wiki The PDF Access Reports component of [[Reggie/CIS]] enabled its reporting system to generate PDF reports by using Microsoft Access and open-source software. This obviated a need for a Crystal Reports server license and its associated maintenance. By using Microsoft Access, PDF reports were also easier for me to create and maintain, since I didn't know Crystal Reports very well at the time. Once this system was in place, it ran itself without any trouble, though I cannot vouch for its stability after I left to go to graduate school. As a design limitation, the PDF Access Reports component could run only one report at a time. This was a result of how the PDF file got generated, which was to use {{Tech:COM}} automation to tell Microsoft Access to print a report. The default printer on the server was set up using [http://pages.cs.wisc.edu/~ghost/redmon/index.htm RedMon] and [http://pages.cs.wisc.edu/~ghost/doc/AFPL/index.htm AFPL Ghostscript] with spooling disabled to print to a fixed file location that got picked up after Access returned from the {{Tech:COM}}-instantiated print command. Concurrent PDF report requests were queued up using standard TCP connection queuing in the PHP-based server process that the reporting server's {{Tech:COM}} component connected to. Here is how the PDF Access Reports server worked: *Following the path of execution from the start at the top-left, a user requests a PDF report from a web browser, sending that request to the appropriate ASP page in the Reggie Reporting System. *That report calls a function in PDFReport.INC to run the report, supplying an optional WHERE clause in the call. *The PDFReport.INC file then instantiates the PDF Generation COM object and tells it to run the report. *Responding to the call, the COM object contacts the PHP PDF Server. If another report is running on the PHP PDF Server, this new report request waits in the PHP PDF Server's TCP/IP pending connection queue until it gets around to completing the connection to service the request. *Once the request comes in, the PHP PDF Server uses PHP's COM abilities to tell the PDF Access Database to print a report given the optional WHERE clause. Access runs the report, querying data from the databases via ODBC in the process. *As pages become available for printing, Access prints them through the standard Win32 APIs, generating a GDI Enhanced Metafile data stream for the printer driver. *The Apple Color LaserWriter 12/600 printer driver, which is configured on the default printer, generates Postscript data and streams it to the output port, which is RedMon rather than a real printer port. *RedMon, configured to pipe the output through AFPL Ghostscript, sends the Postscript data to Ghostscript along with command-line parameters telling it to convert Postscript into PDF and place it into a specific file location. *Ghostscript performs the conversion and writes the PDF file. *Once that process completes, the PHP PDF Server returns from the Access Print Report command (the virtual PDF printer is configured to "print directly to printer" instead of to a print queue). *The PHP PDF Server reads the file and sends the data through the original TCP/IP connection initiated by the COM object. *The PDFReport.INC file then copies the binary data from the COM object to the Response object in ASP, streaming it back to the original web client. *The web client, receiving application/x-pdf data, launches an Adobe Acrobat Reader object for the web browser and displays the PDF data in that browser window object, completing the cycle. 3dba1a0e042afb70a760d631afd1c9de15e2f319 2162 2161 2009-07-30T03:37:33Z Stevenlawrance 1 wikitext text/x-wiki The PDF Access Reports component of [[Reggie/CIS]] enabled its reporting system to generate PDF reports by using Microsoft Access and open-source software. This obviated a need for a Crystal Reports server license and its associated maintenance. By using Microsoft Access, PDF reports were also easier for me to create and maintain, since I didn't know Crystal Reports very well at the time. Once this system was in place, it ran itself without any trouble, though I cannot vouch for its stability after I left to go to graduate school. As a design limitation, the PDF Access Reports component could run only one report at a time. This was a result of how the PDF file got generated, which was to use {{Tech:COM}} automation to tell Microsoft Access to print a report. The default printer on the server was set up using [http://pages.cs.wisc.edu/~ghost/redmon/index.htm RedMon] and [http://pages.cs.wisc.edu/~ghost/doc/AFPL/index.htm AFPL Ghostscript] with spooling disabled to print to a fixed file location that got picked up after Access returned from the {{Tech:COM}}-instantiated print command. Concurrent PDF report requests were queued up using standard TCP connection queuing in the PHP-based server process that the reporting server's {{Tech:COM}} component connected to. [[File:Pdfgeneration.png]] Here is how the PDF Access Reports server worked: *Following the path of execution from the start at the top-left, a user requests a PDF report from a web browser, sending that request to the appropriate ASP page in the Reggie Reporting System. *That report calls a function in PDFReport.INC to run the report, supplying an optional WHERE clause in the call. *The PDFReport.INC file then instantiates the PDF Generation COM object and tells it to run the report. *Responding to the call, the COM object contacts the PHP PDF Server. If another report is running on the PHP PDF Server, this new report request waits in the PHP PDF Server's TCP/IP pending connection queue until it gets around to completing the connection to service the request. *Once the request comes in, the PHP PDF Server uses PHP's COM abilities to tell the PDF Access Database to print a report given the optional WHERE clause. Access runs the report, querying data from the databases via ODBC in the process. *As pages become available for printing, Access prints them through the standard Win32 APIs, generating a GDI Enhanced Metafile data stream for the printer driver. *The Apple Color LaserWriter 12/600 printer driver, which is configured on the default printer, generates Postscript data and streams it to the output port, which is RedMon rather than a real printer port. *RedMon, configured to pipe the output through AFPL Ghostscript, sends the Postscript data to Ghostscript along with command-line parameters telling it to convert Postscript into PDF and place it into a specific file location. *Ghostscript performs the conversion and writes the PDF file. *Once that process completes, the PHP PDF Server returns from the Access Print Report command (the virtual PDF printer is configured to "print directly to printer" instead of to a print queue). *The PHP PDF Server reads the file and sends the data through the original TCP/IP connection initiated by the COM object. *The PDFReport.INC file then copies the binary data from the COM object to the Response object in ASP, streaming it back to the original web client. *The web client, receiving application/x-pdf data, launches an Adobe Acrobat Reader object for the web browser and displays the PDF data in that browser window object, completing the cycle. 85588fc9df82e47685483210f6b384f5092ecdf6 2163 2162 2009-07-30T03:42:11Z Stevenlawrance 1 wikitext text/x-wiki The PDF Access Reports component of [[Reggie/CIS]] enabled its reporting system to generate PDF reports by using Microsoft Access and open-source software. This obviated a need for a Crystal Reports server license and its associated maintenance. By using Microsoft Access, PDF reports were also easier for me to create and maintain, since I didn't know Crystal Reports very well at the time. Once this system was in place, it ran itself without any trouble, though I cannot vouch for its stability after I left to go to graduate school. As a design limitation, the PDF Access Reports component could run only one report at a time. This was a result of how the PDF file got generated, which was to use {{Tech:COM}} automation to tell Microsoft Access to print a report. This limitation in practice was not a problem because the longer-running reports had their long-running parts queried into a purpose-built holding table before PDF generation callout, and the in-practice concurrent demand for PDF generation was not very high. Concurrent PDF report requests were queued up using standard TCP connection queuing in the PHP-based server process that the reporting server's {{Tech:COM}} component connected to. The default printer on the server was set up using [http://pages.cs.wisc.edu/~ghost/redmon/index.htm RedMon] and [http://pages.cs.wisc.edu/~ghost/doc/AFPL/index.htm AFPL Ghostscript] with spooling disabled to print to a fixed file location that got picked up after Access returned from the {{Tech:COM}}-instantiated print command. [[File:Pdfgeneration.png]] Here is how the PDF Access Reports server worked: *Following the path of execution from the start at the top-left, a user requests a PDF report from a web browser, sending that request to the appropriate ASP page in the Reggie Reporting System. *That report calls a function in PDFReport.INC to run the report, supplying an optional WHERE clause in the call. *The PDFReport.INC file then instantiates the PDF Generation COM object and tells it to run the report. *Responding to the call, the COM object contacts the PHP PDF Server. If another report is running on the PHP PDF Server, this new report request waits in the PHP PDF Server's TCP/IP pending connection queue until it gets around to completing the connection to service the request. *Once the request comes in, the PHP PDF Server uses PHP's COM abilities to tell the PDF Access Database to print a report given the optional WHERE clause. Access runs the report, querying data from the databases via ODBC in the process. *As pages become available for printing, Access prints them through the standard Win32 APIs, generating a GDI Enhanced Metafile data stream for the printer driver. *The Apple Color LaserWriter 12/600 printer driver, which is configured on the default printer, generates Postscript data and streams it to the output port, which is RedMon rather than a real printer port. *RedMon, configured to pipe the output through AFPL Ghostscript, sends the Postscript data to Ghostscript along with command-line parameters telling it to convert Postscript into PDF and place it into a specific file location. *Ghostscript performs the conversion and writes the PDF file. *Once that process completes, the PHP PDF Server returns from the Access Print Report command (the virtual PDF printer is configured to "print directly to printer" instead of to a print queue). *The PHP PDF Server reads the file and sends the data through the original TCP/IP connection initiated by the COM object. *The PDFReport.INC file then copies the binary data from the COM object to the Response object in ASP, streaming it back to the original web client. *The web client, receiving application/x-pdf data, launches an Adobe Acrobat Reader object for the web browser and displays the PDF data in that browser window object, completing the cycle. d8662cc6f55f375256bf857a75a349bcf8a40fb3 2164 2163 2009-07-30T03:45:53Z Stevenlawrance 1 wikitext text/x-wiki The PDF Access Reports component of [[Reggie/CIS]] enabled its reporting system to generate PDF reports by using Microsoft Access and open-source software. This obviated a need for a Crystal Reports server license and its associated maintenance. By using Microsoft Access, PDF reports were also easier for me to create and maintain, since I didn't know Crystal Reports very well at the time. Once this system was in place, it ran itself without any trouble, though I cannot vouch for its stability after I left to go to graduate school. As a design limitation, the PDF Access Reports component could run only one report at a time. This was a result of how the PDF file got generated, which was to use {{Tech:COM}} automation to tell Microsoft Access to print a report. This limitation in practice was not a problem because the longer-running reports had their long-running parts queried into a purpose-built holding table before the PDF generation callout, and the in-practice concurrent demand for PDF generation was not very high. Concurrent PDF report requests were queued up using standard TCP connection queuing in the PHP-based server process that the reporting server's {{Tech:COM}} component connected to. The default printer on the server was set up using [http://pages.cs.wisc.edu/~ghost/redmon/index.htm RedMon] and [http://pages.cs.wisc.edu/~ghost/doc/AFPL/index.htm AFPL Ghostscript] with spooling disabled to print to a fixed file location that got picked up after Access returned from the {{Tech:COM}}-instantiated print command. [[File:Pdfgeneration.png]] Here is how the PDF Access Reports server worked: *Following the path of execution from the start at the top-left, a user requests a PDF report from a web browser, sending that request to the appropriate ASP page in the Reggie Reporting System. *That report calls a function in PDFReport.INC to run the report, supplying an optional WHERE clause in the call. *The PDFReport.INC file then instantiates the PDF Generation COM object and tells it to run the report. *Responding to the call, the COM object contacts the PHP PDF Server. If another report is running on the PHP PDF Server, this new report request waits in the PHP PDF Server's TCP/IP pending connection queue until it gets around to completing the connection to service the request. *Once the request comes in, the PHP PDF Server uses PHP's COM abilities to tell the PDF Access Database to print a report given the optional WHERE clause. Access runs the report, querying data from the databases via ODBC in the process. *As pages become available for printing, Access prints them through the standard Win32 APIs, generating a GDI Enhanced Metafile data stream for the printer driver. *The Apple Color LaserWriter 12/600 printer driver, which is configured on the default printer, generates Postscript data and streams it to the output port, which is RedMon rather than a real printer port. *RedMon, configured to pipe the output through AFPL Ghostscript, sends the Postscript data to Ghostscript along with command-line parameters telling it to convert Postscript into PDF and place it into a specific file location. *Ghostscript performs the conversion and writes the PDF file. *Once that process completes, the PHP PDF Server returns from the Access Print Report command (the virtual PDF printer is configured to "print directly to printer" instead of to a print queue). *The PHP PDF Server reads the file and sends the data through the original TCP/IP connection initiated by the COM object. *The PDFReport.INC file then copies the binary data from the COM object to the Response object in ASP, streaming it back to the original web client. *The web client, receiving application/x-pdf data, launches an Adobe Acrobat Reader object for the web browser and displays the PDF data in that browser window object, completing the cycle. 4803568503f888a821083f6b583962be3c79642f Template:Tech:Selenium 10 1656 2176 2009-08-24T00:57:21Z Stevenlawrance 1 Created page with '[http://seleniumhq.org/ Selenium]' wikitext text/x-wiki [http://seleniumhq.org/ Selenium] 2778c8b7c32da37543b7de055e1b049a83388cd2 AriesType 0 1596 2194 2033 2009-08-25T15:11:39Z Stevenlawrance 1 wikitext text/x-wiki [[Image:AriesType-Splash.png|thumb|400px|right|AriesType's credits. Brian Dougher, a friend, helped out with the graphics and used his BASIC compiler to generate [http://en.wikipedia.org/wiki/EXE EXE] files from the {{Tech:BASIC}} source code]] AriesType was a [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities. At the time, I had penned some of my software as Aries Software or a variant, though Aries Software was simply an unregistered alter-ego of me. I wrote AriesType in lieu of taking an introductory computer class in high school, and the work primarily occurred during class hours in the same classroom at that class. My past experience at the time with computers and software enabled that position. This project was my first network-enabled multi-user application and was worthwhile for learning about related concerns. AriesType was completed as a working product, though its real-time student typing playback feature was never finished. The typing playback feature would have simulated what the screen looked like for a selected student's typing session, including delays and mistakes, though this likely would not have given much value to teachers. This and the email and paging features are classic examples of [http://en.wikipedia.org/wiki/Gold_plating_%28disambiguation%29 gold plating] that less-experienced software engineers suffer from. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/ariestype.exe Download the AriesType installer]''', which uses [[CatSetup]] for an easy installation instead of AriesType's own installer *{{CatSetupFiles}} ==Screenshots== ===Typing=== Students touch type sentences into AriesType while the system logs the character and timing of each keystroke for later playback. {| |[[Image:AriesType-Typing.png|thumb|400px|none|View of a student typing sentences. AriesType collects metrics on accuracy and timing as the student types]] |[[Image:AriesType-TypingResults.png|thumb|400px|none|The results of a student's typing efforts, which are shown to the student after they finish. The teacher can also retrieve these results as they are stored on the network]] |} ===Sentence Editor=== Teachers can edit and choose the set of sentences that students type. {| |[[Image:AriesType-SentenceEditMenu.png|thumb|400px|none|Sentence editor menu, which also lets a teacher import sentences from an expansion floppy disk or another directory]] |[[Image:AriesType-SentenceEditor.png|thumb|400px|none|The sentence editor, which allows editing of one line at a time]] |} ===Menus=== AriesType displayed a different menu to students, teachers, and system operators. {| |[[Image:AriesType-GraphicalTeacherStartup.png|thumb|300px|none|The unfinished graphical version of AriesType. Only the teacher's menu had a graphical alternative]] |[[Image:AriesType-StudentMenu.png|thumb|400px|none|The student's menu. Menu item accessibility is controlled for each student by the teacher. If the exit option is disabled, then attempting to exit tells the student to reboot the computer]] |- |[[Image:AriesType-TeacherMenu.png|thumb|400px|none|The text version of the teacher's menu. Real-time playback of the student's typing was not finished, which is shown as the first item in the menu. In retrospect, such a feature is likely of little or no value to teachers]] |[[Image:AriesType-GraphicalTeacherMenu.png|thumb|400px|none|The graphical version of the teacher's menu with the paging submenu shown. Students can page teachers, similar to how a [http://en.wikipedia.org/wiki/Pager mobile pager] operates, but unlike [http://en.wikipedia.org/wiki/Instant_messaging instant messaging], a teacher must check for pages, and pages to not contain anything other than the name of the student who paged]] |- |[[Image:AriesType-SysopMenu.png|thumb|400px|none|The system operator's menu]] |} ===Email=== AriesType supported a limited form of local-only email. Users could not communicate with people outside of a network's AriesType installation using this system. {| |[[Image:AriesType-EmailPage1.png|thumb|400px|none|AriesType's email setup screen, which asks for the destination user and the subject line. The sender needs to get the destination name exactly correct or else risk having the recipient not seeing the message, and no warning is given to the sender if that happens]] |[[Image:AriesType-EmailPage2.png|thumb|400px|none|The message's contents were typed in one line at a time, and it was not possible to return to a previous line after the [Enter] key was pressed. Messages had a limit of 15 lines]] |- |[[Image:AriesType-EmailReader2.png|thumb|400px|none|The student, who was the recipient of the email in the previous screenshot, receives the message when they check for mail. Deleting a message was known as "killing" it, though it unfortunately does not work properly in the final version of AriesType]] |[[Image:AriesType-EmailReader.png|thumb|400px|none|AriesType included an initial email with the installation that highlighted my ego at the time]] |} 84de40c1a21bea589ca53f69281cbb9ece118069 Main Page 0 1404 2197 2154 2009-11-01T19:47:42Z Stevenlawrance 1 wikitext text/x-wiki {| |valign="top"| Welcome to Moonlight Design -- the personal web site of [[Henry Lamb]] and [[Steven Lawrance]] ==Henry Lamb== [[Henry Lamb]] is a professional [http://en.wikipedia.org/wiki/Restaurant restaurateur] trained in both [http://www.baychef.com/programs/hospitality_and_restaurant.asp restaurant management] and [http://www.baychef.com/programs/culinary_arts.asp culinary arts] at the [http://www.baychef.com/ California Culinary Academy]. For a few years from the late 1990s to the early 2000s, Henry was a [http://en.wikipedia.org/wiki/Graphic_designer graphic designer] trained at the [http://www.artinstitutes.edu/sanfrancisco/ Art Institute of San Francisco] and the [http://www.academyart.edu/ Academy of Art University] Visit Henry's new wine site: [http://glassofgrape.com/ Glass of Grape] ==Steven Lawrance== [[Steven Lawrance]] is an active practitioner of [http://en.wikipedia.org/wiki/Software_engineering software engineering] and [http://en.wikipedia.org/wiki/Open-source_software open-source software enthusiast] trained in [http://www.mse.cs.cmu.edu/ software engineering] at [http://www.mse.cs.cmu.edu/ Carnegie Mellon University] and [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ business administration] with [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems computer information systems] at [http://www.bryant.edu/ Bryant University] [[Steven Lawrance#Software Project Experience|Check out the list of software that Steve has either written or contributed to]] [http://www.facebook.com/slawrance Steven's Facebook profile] |valign="top" width="25%"| {|border="1" | <font size="5">[https://www.moonlightdesign.org/urllock/ IE URL Lock]</font> <font size="5">[http://gnucashtoqif.sourceforge.net/ GnuCashToQIF]</font> <font size="3">[https://www.moonlightdesign.org/dirlist DirList] [[CompactOnDelete]]</font> <font size="3">[[PortProxy]]</font> <font size="2">[[Serendipity|Team Serendipity]]</font> <font size="2">[[Disk Imager]]</font> <font size="1">[[ScreenWindowX]]</font> |} <small>[https://www.moonlightdesign.org/wireless/ Guest wireless network sign-up] (local network only)<br> [http://imac.internal.moonlightdesign.org:2170/eyetv EyeTV (internal network only)]</small> |} 8aeefff51fc143f4a195952ecbc3213a9ffc5cf8 2198 2197 2009-11-01T19:48:30Z Stevenlawrance 1 wikitext text/x-wiki {| |valign="top"| Welcome to Moonlight Design -- the personal web site of [[Henry Lamb]] and [[Steven Lawrance]] ==Henry Lamb== [[Henry Lamb]] is a professional [http://en.wikipedia.org/wiki/Restaurant restaurateur] trained in both [http://www.baychef.com/programs/hospitality_and_restaurant.asp restaurant management] and [http://www.baychef.com/programs/culinary_arts.asp culinary arts] at the [http://www.baychef.com/ California Culinary Academy]. For a few years from the late 1990s to the early 2000s, Henry was a [http://en.wikipedia.org/wiki/Graphic_designer graphic designer] trained at the [http://www.artinstitutes.edu/sanfrancisco/ Art Institute of San Francisco] and the [http://www.academyart.edu/ Academy of Art University] Visit Henry's new wine site: [http://glassofgrape.com/ Glass of Grape] ==Steven Lawrance== [[Steven Lawrance]] is an active practitioner of [http://en.wikipedia.org/wiki/Software_engineering software engineering] and [http://en.wikipedia.org/wiki/Open-source_software open-source software enthusiast] trained in [http://www.mse.cs.cmu.edu/ software engineering] at [http://www.mse.cs.cmu.edu/ Carnegie Mellon University] and [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ business administration] with [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems computer information systems] at [http://www.bryant.edu/ Bryant University] [[Steven Lawrance#Software Project Experience|Check out the list of software that Steve has either written or contributed to]] [http://www.facebook.com/slawrance Steven's Facebook profile] |valign="top" width="25%"| {|border="1" | <font size="5">[https://www.moonlightdesign.org/urllock/ IE URL Lock]</font> <font size="5">[http://gnucashtoqif.sourceforge.net/ GnuCashToQIF]</font> <font size="3">[https://www.moonlightdesign.org/dirlist DirList] [[CompactOnDelete]]</font> <font size="3">[[PortProxy]]</font> <font size="2">[[Serendipity|Team Serendipity]]</font> <font size="2">[[Disk Imager]]</font> <font size="1">[[ScreenWindowX]]</font> |} <small>[https://www.moonlightdesign.org/wireless/ Guest wireless network sign-up] (local network only)</small> |} 00b3c1bf69fa6cd15381f11bc0b6ba1bc8ca1e2e 2205 2198 2010-05-14T16:48:15Z Stevenlawrance 1 wikitext text/x-wiki {| |valign="top"| Welcome to Moonlight Design -- the personal web site of [[Henry Lamb]] and [[Steven Lawrance]] ==Henry Lamb== [[Henry Lamb]] is a professional [http://en.wikipedia.org/wiki/Restaurant restaurateur] trained in both [http://www.baychef.com/programs/hospitality_and_restaurant.asp restaurant management] and [http://www.baychef.com/programs/culinary_arts.asp culinary arts] at the [http://www.baychef.com/ California Culinary Academy]. For a few years from the late 1990s to the early 2000s, Henry was a [http://en.wikipedia.org/wiki/Graphic_designer graphic designer] trained at the [http://www.artinstitutes.edu/sanfrancisco/ Art Institute of San Francisco] and the [http://www.academyart.edu/ Academy of Art University] Visit Henry's new wine site: [http://glassofgrape.com/ Glass of Grape] ==Steven Lawrance== [[Steven Lawrance]] is an active practitioner of [http://en.wikipedia.org/wiki/Software_engineering software engineering] and [http://en.wikipedia.org/wiki/Open-source_software open-source software enthusiast] trained in [http://www.mse.cs.cmu.edu/ software engineering] at [http://www.mse.cs.cmu.edu/ Carnegie Mellon University] and [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ business administration] with [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems computer information systems] at [http://www.bryant.edu/ Bryant University] [[Steven Lawrance#Software Project Experience|Check out the list of software that Steve has either written or contributed to]] |valign="top" width="25%"| {|border="1" | <font size="5">[https://www.moonlightdesign.org/urllock/ IE URL Lock]</font> <font size="5">[http://gnucashtoqif.sourceforge.net/ GnuCashToQIF]</font> <font size="3">[https://www.moonlightdesign.org/dirlist DirList] [[CompactOnDelete]]</font> <font size="3">[[PortProxy]]</font> <font size="2">[[Serendipity|Team Serendipity]]</font> <font size="2">[[Disk Imager]]</font> <font size="1">[[ScreenWindowX]]</font> |} <small>[https://www.moonlightdesign.org/wireless/ Guest wireless network sign-up] (local network only)</small> |} af89d10cbb288751357fa2d41ae74293fe7b0047 SLOS-DOS 0 1537 2199 1971 2010-01-23T20:22:57Z Stevenlawrance 1 SV! is really SV# wikitext text/x-wiki Steven Lawrance's Operating System (SLOS), also known briefly as Steven Lawrance's Operating Program (SL-OP), was a small interpreted toy operating environment written in {{Tech:BASIC}} for {{Tech:DOS}}. The primary motivation for writing this was to have an environment that supported [http://en.wikipedia.org/wiki/Long_filename long file names]. This was written in 1993 -- two years before [http://en.wikipedia.org/wiki/Microsoft Microsoft] released native long file name support in a consumer operating system with [http://en.wikipedia.org/wiki/Windows_95 Windows 95]. SLOS was primarily distributed on the [http://www.flightsim.com/arcanum/fs.htm Contrails] [http://en.wikipedia.org/wiki/Bulletin_board_system BBS] in [http://en.wikipedia.org/wiki/Euless%2C_Texas Euless, Texas]. It is now distributed from this web site. ==Download== *'''[https://www.moonlightdesign.org/steve/programs/slosdist1.exe Download SLOS-DOS and SLOS-Win]''' *'''[https://www.moonlightdesign.org/steve/programs/sloswin.zip Download SLOS-Win's Source Code]''', a [[SLOS-Win|Windows version of SLOS]] *{{CatSetupFiles}} ==Commands== [[Image:Slos-installed.png|right|thumb|450px|Screen shot of what SLOS looks like on its first use, which runs a small installer to finalize the setup]] [[Image:Slos-dir.png|right|thumb|450px|Screen shot of the DIR directory listing command]] SLOS's command prompt permits the user to run any of the following commands from its [http://en.wikipedia.org/wiki/Smiley smile emoticon] :-) prompt: {|border="1" |- |SLTOOLS||Steven Lawrance's Tools |- |HELP||Help System |- |DIR||File Listing |- |CLS||Clears Screen |- |RUN program||Runs a Program |- |LOAD program||Loads a Program |- |EDIT||Creates a New DOS File |- |EDIT filename||Edits an SL-File |- |NEW filename||Creates a New SL File |- |FAT||Updates FAT |- |EXIT||Exits SL-OS |- |QUIT||Exits SL-OS |- |DEL filename||Deletes an SL-File |- |UNDEL||Undeletes an SL-File with a DOS name |- |UNDEL filename||Undeletes an SL-File with a DOS name |- |PURGE||Purges a Deleted SL-File |} ==Scripting Language== SLOS executes script files having a "exc" file extension in an interpreted manner. Because this interpreter is running within the BASIC interpreter, execution speed is noticeably slow. The scripting language is difficult to read due to its overuse of abbreviations. [[CatSetup]], by contrast, has a scripting language that is easier to write and read. ===Syntax=== The following commands are possible in a SLOS program. Each command appears by itself on its own line with no surrounding whitespace. {|border="1" |- |P!text |Prints text on the screen. {|border="1" |Example: |- |P!Hello!||How are you today? |} |- |I$nquestion |Asks a question. n=number of answers, question=text to display {|border="1" |Example: |- |I$2Do you? [Y] [N]||Ask "Do you? [Y] [N]" with 2 (Y,N) options |- |Y||User pressed Y |- |S#7||What to do when the user pressed Y |- |N||User pressed N |- |P!Why not?!||What to do when the user pressed N |- |ND||End application |- |P!Good!||Display "Good!" on the screen |- |ND||End application |} |- |I#nquestion||Just like I$nquestion, except it operates with numbers (not letters such as Y and N). |- |L#xxyy |Locates a position (xx,yy) on the screen. {|border="1" |Example: |- |L#3002||Locates (30,2) or (30,02) on the screen |} |- |S#line |Skips to a line in the program. {|border="1" |Example: |- |S#2||Skips to line number 2 |- |P!Hi!||Prints "Hi!" at line number 2 |} |- |D$command (II function) |Runs DOS program. Use II to set parameters. II isn't required. {|border="1" |Example: |- |P!Enter Parameters |- |II||Asks user to supply parameters |- |D$EDIT||Executes command "EDIT" Note: D$ can work by itself assuming II has a value |} |- |F$file |Loads a value into the file variable. {|border="1" |Example: |- |F$Configuration File||Sets "Configuration File" as the file var. |} |- |L!||Loads the string and number variable from file. Don't worry about it until you understand it. |- |SV$string||Sets the string variable. |- |SV#number |Sets the number variable. {|border="1" |Example: |- |SV$Hello there!||Sets string variable to "Hello there!" |- |SV#9||Sets number variable to 9 |- |F$Hello!||Sets file variable to "Hello!" |- |S!||Saves string and number variables to "Hello!" |} |- |$givenvalue |If string variable equals givenvalue, execute next instruction. Else, execute instruction after next. {|border="1" |Example: |- |P!Enter a string value:||Types text on screen |- |V$||Asks user for the string variable |- |$Hello||If string variable = "Hello", |- |S#7||Go to line number 7. |- |P!You didn't type in "Hello"!||Else, print text. |- |ND||Exit |- |P!You typed in "Hello"!||Print text |- |ND||Exit |} |- |#givennumber||If number variable equals givennumber, execute next instruction. Else, execute instruction after next. Note: This is just like $givenvalue, except a number should be in the givennumber. |} ===Example=== The following example is a very trivial animation program named "Animation Master" in SLOS. It requires the user to hold down a key to switch between two screens to make the user think that the person is talking. <pre> C! P!Animation Master v2.1 P!Version for SL-OS P! I$4Ready for some fun? [Y] [N] Y S#15 y S#15 N S#13 n P!You don't know what you are missing! ND C! P! . . P! . - , I talking! P! --- L#0120 I$2Press [1] for next frame, hold [1] for animation, or [0] to exit. 1 S#25 0 ND C! P! . . P! . - Hello, am ! P! \___/ L#0120 I$2Press [1] for next frame, hold [1] for animation, or [0] to exit. 1 S#15 0 ND </pre> ==Limitations== SLOS's scripting environment contains a large list of limitations, and some are expressed in the following list: *The scripting language is not [http://en.wikipedia.org/wiki/Turing_completeness Turing-complete] *The screen always has a light-blue background with a white foreground *Conditional expressions are only allowed in a few operations *Programs get only one number variable and one string variable, which is a huge limitation for all but trivial programs *Loading and saving data files within a program is limited to saving the program's two variables *Looping can only be done with the only number variable that you have 408afa1112f950dffa6e0d84137593559014c299 CompactOnDelete 0 1653 2202 2151 2010-02-01T07:16:09Z Stevenlawrance 1 wikitext text/x-wiki CompactOnDelete is a Mozilla Thunderbird extension that schedules IMAP folder compaction to happen when Thunderbird loses its window focus or closes after messages are removed from an IMAP folder. Only those folders with removals are compacted; other folders are left alone. This is meant to automatically make deleted messages disappear from Outlook and Outlook Web Access on an Exchange server when they are deleted in Thunderbird. Other IMAP servers don't need this extension, and the use of this extension limits your ability to undo as soon as Thunderbird loses its window focus, since compacting a folder clears the undo/redo history. *[https://www.moonlightdesign.org/compactondelete/compactondelete-0.4.7.xpi Download extension] (right-click and select "Save Link As...") *[https://www.moonlightdesign.org/compactondelete/svn/ Subversion repository] A future enhancement could involve detecting which IMAP servers are Exchange and compacting only their folders on Thunderbird's focus loss. Presently, this extension will compact any IMAP folder that gets messages deleted or moved away from it. This extension now compacts the folders that a focus loss would have compacted when Thunderbird is closed, though it presently does not work if the user uses File | Quit instead of closing the window. CompactOnDelete is distributed under the terms of the [http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License (GPL), version 2], and is copyright (c) 2008 Steven Lawrance. b3e6be807f9e87972642c8bc20b51ae89799e06b 2203 2202 2010-02-01T07:16:25Z Stevenlawrance 1 wikitext text/x-wiki CompactOnDelete is a Mozilla Thunderbird 2.0 and 3.0 extension that schedules IMAP folder compaction to happen when Thunderbird loses its window focus or closes after messages are removed from an IMAP folder. Only those folders with removals are compacted; other folders are left alone. This is meant to automatically make deleted messages disappear from Outlook and Outlook Web Access on an Exchange server when they are deleted in Thunderbird. Other IMAP servers don't need this extension, and the use of this extension limits your ability to undo as soon as Thunderbird loses its window focus, since compacting a folder clears the undo/redo history. *[https://www.moonlightdesign.org/compactondelete/compactondelete-0.4.7.xpi Download extension] (right-click and select "Save Link As...") *[https://www.moonlightdesign.org/compactondelete/svn/ Subversion repository] A future enhancement could involve detecting which IMAP servers are Exchange and compacting only their folders on Thunderbird's focus loss. Presently, this extension will compact any IMAP folder that gets messages deleted or moved away from it. This extension now compacts the folders that a focus loss would have compacted when Thunderbird is closed, though it presently does not work if the user uses File | Quit instead of closing the window. CompactOnDelete is distributed under the terms of the [http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License (GPL), version 2], and is copyright (c) 2008 Steven Lawrance. 5ff18baa372b70eb17e201b62f60a07d93e7f099 2204 2203 2010-02-01T20:09:26Z Stevenlawrance 1 wikitext text/x-wiki CompactOnDelete is a Mozilla Thunderbird 2.0 and 3.0 extension that schedules IMAP folder compaction to happen when Thunderbird loses its window focus or closes after messages are removed from an IMAP folder. Only those folders with removals are compacted; other folders are left alone. This is meant to automatically make deleted messages disappear from Outlook and Outlook Web Access on an Exchange server when they are deleted in Thunderbird. Other IMAP servers don't need this extension, and the use of this extension limits your ability to undo as soon as Thunderbird loses its window focus, since compacting a folder clears the undo/redo history. *[https://www.moonlightdesign.org/compactondelete/compactondelete-0.4.7.xpi Download extension] (right-click and select "Save Link As...") *[https://www.moonlightdesign.org/compactondelete/svn/ Subversion repository] A future enhancement could involve detecting which IMAP servers are Exchange and compacting only their folders on Thunderbird's focus loss. Presently, this extension will compact any IMAP folder that gets messages deleted or moved away from it. This extension now compacts the folders that a focus loss would have compacted when Thunderbird is closed, though it presently does not work if the user uses File | Quit instead of closing the window. CompactOnDelete is distributed under the terms of the [http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License (GPL), version 2], and is copyright (c) 2008-2010 Steven Lawrance. a04828485143d049db640ff388bda9c9a72ecf0f Reggie/CIS 0 1454 2209 1614 2010-08-29T22:59:31Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Applet-login.png|right|thumb|300px|Login screen appearance before the HIPAA-related "no trespassing" notice was added]] Reggie/CIS was a large 200-user multi-tenant three-tiered system that was used by all [http://hab.hrsa.gov/ Ryan White CARE]-funded [http://en.wikipedia.org/wiki/Aids AIDS] service organizations in [http://en.wikipedia.org/wiki/San_francisco San Francisco, California] in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] (DPH) [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years. At its peak, this system was used by more than 100 organizations. It was eventually replaced with a web-based state-wide system. ==Motivations== Named after its champion, [http://groups.msn.com/ReggieWilliamsExhibit Reggie Williams], Reggie/CIS successfully centralized client registration data for [http://dir.yahoo.com/Regional/U_S__States/California/Metropolitan_Areas/San_Francisco_Bay_Area/Health/AIDS_HIV/Organizations/ AIDS service organizations in San Francisco], substantially easing the registration process for people living with HIV or AIDS who chose to share their registration data with other Reggie organizations when vising previously-unvisited AIDS service organizations. This meant that documents such as the letter of HIV diagnosis and [http://en.wikipedia.org/wiki/CD4 CD4] count information were entered into the system by one organization and then immediately available to all other AIDS service organizations that the client registered with. Before Reggie/CIS, clients would need to present their paperwork at every AIDS service organization that they visit when initially registering, and San Francisco is notorious for having many small, specialized AIDS service organizations for various needs such as medical care, housing subsidies, food, legal advice, disability benefits counseling, mental health, and medication adherence assistance. Reggie/CIS put each client in control of their data, permitting clients to share or unshare their data with other Reggie organizations at any time. For the DPH, the centralized data in Reggie substantially eased reporting requirements for the federal, state, and county governments. The data was actively kept unduplicated for reporting purposes while respecting each client's data sharing preferences, enabling duplication of data at the agency level while keeping clients unduplicated in reports for accurate reporting. The San Francisco AIDS Foundation and two other collaborating partners used the "CIS" part of the Reggie/CIS system, which built upon the Reggie application and database to provide customized data applications suited for the collaboration's needs. This included data entry screens and reports for rental subsidies, volunteers, care plans, progress notes, and other needs. I was the active maintainer, administrator, and software engineer of the CIS extension from 2001 to 2005, though my colleague at the DPH and I often worked on each other's part of the system when implementing new functionality. Reggie/CIS was originally implemented by a software consulting firm in 1997. It's architecture remained largely the same throughout its lifetime, though substantial improvements were made while I was one of its two to three maintainers from 2000 to 2005. It originally used Java's limited [http://en.wikipedia.org/wiki/Abstract_Windowing_Toolkit abstract windowing toolkit] (AWT) and a proprietary widget set made by a by-2000 defunct company, and my first enhancement to the system was to convert it to [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing] in the days before fancy [http://en.wikipedia.org/wiki/Refactoring refactoring] tools were readily available. Other enhancements that I added or substantially contributed to included major new features, solid stability and fault tolerance, increased manageability, easy installation and uninstallation, portability to non-Windows operating systems, and automatic upgrades. Reggie/CIS started out as a full application started with batch files, and automatic upgrades were achieved by converting that into a [http://en.wikipedia.org/wiki/Java_applet Java applet]. ==Architecture== Reggie/CIS consisted of two main systems -- data entry and reporting. The data entry system was a [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing] [http://en.wikipedia.org/wiki/Fat_client fat client] that connected with the middle-tier [http://en.wikipedia.org/wiki/Business_logic business logic] server using the [http://en.wikipedia.org/wiki/Corba common object request broker architecture] (CORBA). The middle tier connected to a [http://en.wikipedia.org/wiki/Microsoft_SQL_Server Microsoft SQL Server] database using a third party JDBC driver (Microsoft did not offer a free JDBC driver during most of Reggie/CIS's lifetime). The database consisted of approximately 100 tables, a moderate number of stored procedures, and one-way replication to two reporting database servers. Reggie/CIS's reporting system was originally written in [http://en.wikipedia.org/wiki/Vbscript Microsoft Visual Basic Script] (VBScript) and published to a closed network using [http://en.wikipedia.org/wiki/Active_Server_Pages Microsoft classic Active Server Pages] (ASP). Reports and data were made available as appropriate for the user's role and their organization, effectively hiding data that they did not have access to in the data entry application. [[PDF Access Reports|PDF reports]] were achieved with Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, enabling web-based PDF reports within the reporting system through the web browser. ===Data entry system deployment view=== A CIS-centric deployment view of the system is depicted in the following diagram: [[Image:ReggieCISServers.png]] ===Reporting system deployment view=== The reporting system also followed a three-tiered pattern: [[Image:Reporting.png]] ===Data flow view of the data entry system's login process=== The data entry client ran as a [http://en.wikipedia.org/wiki/Java_applet Java applet] and, after I left to get a master's degree at Carnegie Mellon University (CMU), as a [http://en.wikipedia.org/wiki/Webstart Java WebStart] application. Installation of the applet was made easy with a web-based multi-stage JavaScript-based installer, though its ease of use was achieved with a rather complex implementation. When the applet starts up, it obtains a reference to a business server object that it uses for object manipulation when the user logs in. This is depicted in the following diagram: [[Image:Client.png]] e05a62a111a6b45ed051df0cbc02187a5adf957d 2235 2209 2013-08-25T05:41:47Z Stevenlawrance 1 wikitext text/x-wiki [[Image:Applet-login.png|right|thumb|300px|Login screen appearance before the HIPAA-related "no trespassing" notice was added]] Reggie/CIS was a large 200-user multi-tenant three-tiered system that was used by all [http://hab.hrsa.gov/ Ryan White CARE]-funded [http://en.wikipedia.org/wiki/Aids AIDS] service organizations in [http://en.wikipedia.org/wiki/San_francisco San Francisco, California] in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health] (DPH) [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation], where I worked for about five years. At its peak, this system was used by more than 100 organizations. It was eventually replaced with a web-based state-wide system.<br/> ==Motivations== Named after its champion, [http://groups.msn.com/ReggieWilliamsExhibit Reggie Williams], Reggie/CIS successfully centralized client registration data for [http://dir.yahoo.com/Regional/U_S__States/California/Metropolitan_Areas/San_Francisco_Bay_Area/Health/AIDS_HIV/Organizations/ AIDS service organizations in San Francisco], substantially easing the registration process for people living with HIV or AIDS who chose to share their registration data with other Reggie organizations when vising previously-unvisited AIDS service organizations. This meant that documents such as the letter of HIV diagnosis and [http://en.wikipedia.org/wiki/CD4 CD4] count information were entered into the system by one organization and then immediately available to all other AIDS service organizations that the client registered with. Before Reggie/CIS, clients would need to present their paperwork at every AIDS service organization that they visit when initially registering, and San Francisco is notorious for having many small, specialized AIDS service organizations for various needs such as medical care, housing subsidies, food, legal advice, disability benefits counseling, mental health, and medication adherence assistance. Reggie/CIS put each client in control of their data, permitting clients to share or unshare their data with other Reggie organizations at any time. For the DPH, the centralized data in Reggie substantially eased reporting requirements for the federal, state, and county governments. The data was actively kept unduplicated for reporting purposes while respecting each client's data sharing preferences, enabling duplication of data at the agency level while keeping clients unduplicated in reports for accurate reporting. The San Francisco AIDS Foundation and two other collaborating partners used the "CIS" part of the Reggie/CIS system, which built upon the Reggie application and database to provide customized data applications suited for the collaboration's needs. This included data entry screens and reports for rental subsidies, volunteers, care plans, progress notes, and other needs. I was the active maintainer, administrator, and software engineer of the CIS extension from 2001 to 2005, though my colleague at the DPH and I often worked on each other's part of the system when implementing new functionality. Reggie/CIS was originally implemented by a software consulting firm in 1997. It's architecture remained largely the same throughout its lifetime, though substantial improvements were made while I was one of its two to three maintainers from 2000 to 2005. It originally used Java's limited [http://en.wikipedia.org/wiki/Abstract_Windowing_Toolkit abstract windowing toolkit] (AWT) and a proprietary widget set made by a by-2000 defunct company, and my first enhancement to the system was to convert it to [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing] in the days before fancy [http://en.wikipedia.org/wiki/Refactoring refactoring] tools were readily available. Other enhancements that I added or substantially contributed to included major new features, solid stability and fault tolerance, increased manageability, easy installation and uninstallation, portability to non-Windows operating systems, and automatic upgrades. Reggie/CIS started out as a full application started with batch files, and automatic upgrades were achieved by converting that into a [http://en.wikipedia.org/wiki/Java_applet Java applet]. ==Architecture== Reggie/CIS consisted of two main systems -- data entry and reporting. The data entry system was a [http://en.wikipedia.org/wiki/Swing_%28Java%29 Swing] [http://en.wikipedia.org/wiki/Fat_client fat client] that connected with the middle-tier [http://en.wikipedia.org/wiki/Business_logic business logic] server using the [http://en.wikipedia.org/wiki/Corba common object request broker architecture] (CORBA). The middle tier connected to a [http://en.wikipedia.org/wiki/Microsoft_SQL_Server Microsoft SQL Server] database using a third party JDBC driver (Microsoft did not offer a free JDBC driver during most of Reggie/CIS's lifetime). The database consisted of approximately 100 tables, a moderate number of stored procedures, and one-way replication to two reporting database servers. Reggie/CIS's reporting system was originally written in [http://en.wikipedia.org/wiki/Vbscript Microsoft Visual Basic Script] (VBScript) and published to a closed network using [http://en.wikipedia.org/wiki/Active_Server_Pages Microsoft classic Active Server Pages] (ASP). Reports and data were made available as appropriate for the user's role and their organization, effectively hiding data that they did not have access to in the data entry application. [[PDF Access Reports|PDF reports]] were achieved with Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, enabling web-based PDF reports within the reporting system through the web browser. ===Data entry system deployment view=== A CIS-centric deployment view of the system is depicted in the following diagram: [[Image:ReggieCISServers.png]] ===Reporting system deployment view=== The reporting system also followed a three-tiered pattern: [[Image:Reporting.png]] ===Data flow view of the data entry system's login process=== The data entry client ran as a [http://en.wikipedia.org/wiki/Java_applet Java applet] and, after I left to get a master's degree at Carnegie Mellon University (CMU), as a [http://en.wikipedia.org/wiki/Webstart Java WebStart] application. Installation of the applet was made easy with a web-based multi-stage JavaScript-based installer, though its ease of use was achieved with a rather complex implementation. When the applet starts up, it obtains a reference to a business server object that it uses for object manipulation when the user logs in. This is depicted in the following diagram: [[Image:Client.png]] d5f71e13504854417e0c3d830be79288c7c95453 Main Page 0 1404 2210 2205 2010-10-30T17:20:59Z Stevenlawrance 1 wikitext text/x-wiki {| |valign="top"| Welcome to Moonlight Design -- the personal web site of [[Henry Lamb]] and [[Steven Lawrance]] ==Henry Lamb== [[Henry Lamb]] is a professional [http://en.wikipedia.org/wiki/Restaurant restaurateur] trained in both [http://www.baychef.com/programs/hospitality_and_restaurant.asp restaurant management] and [http://www.baychef.com/programs/culinary_arts.asp culinary arts] at the [http://www.baychef.com/ California Culinary Academy]. For a few years from the late 1990s to the early 2000s, Henry was a [http://en.wikipedia.org/wiki/Graphic_designer graphic designer] trained at the [http://www.artinstitutes.edu/sanfrancisco/ Art Institute of San Francisco] and the [http://www.academyart.edu/ Academy of Art University] Visit Henry's new wine site: [http://glassofgrape.com/ Glass of Grape] ==Steven Lawrance== [[Steven Lawrance]] is an active practitioner of [http://en.wikipedia.org/wiki/Software_engineering software engineering] and [http://en.wikipedia.org/wiki/Open-source_software open-source software enthusiast] trained in [http://www.mse.cs.cmu.edu/ software engineering] at [http://www.mse.cs.cmu.edu/ Carnegie Mellon University] and [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ business administration] with [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems computer information systems] at [http://www.bryant.edu/ Bryant University] [[Steven Lawrance#Software Project Experience|Check out the list of software that Steve has either written or contributed to]] |valign="top" width="25%"| {|border="1" | <font size="5">[https://www.moonlightdesign.org/urllock/ IE URL Lock]</font> <font size="5">[http://gnucashtoqif.sourceforge.net/ GnuCashToQIF]</font> <font size="3">[https://www.moonlightdesign.org/dirlist DirList] [[CompactOnDelete]]</font> <font size="3">[[PortProxy]]</font> <font size="2">[[Serendipity|Team Serendipity]]</font> <font size="2">[[Disk Imager]]</font> <font size="1">[[ScreenWindowX]]</font> |} <small>[https://www.moonlightdesign.org/wireless/ Guest wireless network sign-up] (local network only)</small> |} <div style="display:none;"> http://testv6.stdio.be/v6.lua/counter.gif </div> d36723f780e34da07eec3172b6af23739cca46ca 2211 2210 2010-10-30T17:23:24Z Stevenlawrance 1 wikitext text/x-wiki {| |valign="top"| Welcome to Moonlight Design -- the personal web site of [[Henry Lamb]] and [[Steven Lawrance]] ==Henry Lamb== [[Henry Lamb]] is a professional [http://en.wikipedia.org/wiki/Restaurant restaurateur] trained in both [http://www.baychef.com/programs/hospitality_and_restaurant.asp restaurant management] and [http://www.baychef.com/programs/culinary_arts.asp culinary arts] at the [http://www.baychef.com/ California Culinary Academy]. For a few years from the late 1990s to the early 2000s, Henry was a [http://en.wikipedia.org/wiki/Graphic_designer graphic designer] trained at the [http://www.artinstitutes.edu/sanfrancisco/ Art Institute of San Francisco] and the [http://www.academyart.edu/ Academy of Art University] Visit Henry's new wine site: [http://glassofgrape.com/ Glass of Grape] ==Steven Lawrance== [[Steven Lawrance]] is an active practitioner of [http://en.wikipedia.org/wiki/Software_engineering software engineering] and [http://en.wikipedia.org/wiki/Open-source_software open-source software enthusiast] trained in [http://www.mse.cs.cmu.edu/ software engineering] at [http://www.mse.cs.cmu.edu/ Carnegie Mellon University] and [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ business administration] with [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems computer information systems] at [http://www.bryant.edu/ Bryant University] [[Steven Lawrance#Software Project Experience|Check out the list of software that Steve has either written or contributed to]] |valign="top" width="25%"| {|border="1" | <font size="5">[https://www.moonlightdesign.org/urllock/ IE URL Lock]</font> <font size="5">[http://gnucashtoqif.sourceforge.net/ GnuCashToQIF]</font> <font size="3">[https://www.moonlightdesign.org/dirlist DirList] [[CompactOnDelete]]</font> <font size="3">[[PortProxy]]</font> <font size="2">[[Serendipity|Team Serendipity]]</font> <font size="2">[[Disk Imager]]</font> <font size="1">[[ScreenWindowX]]</font> |} <small>[https://www.moonlightdesign.org/wireless/ Guest wireless network sign-up] (local network only)</small> |} <div style="display: none;"> http://testv6.stdio.be/v6.lua/counter.gif </div> fa488a9a4352c0e914c928ac9e99e776bf465b5f 2212 2211 2010-10-30T17:25:06Z Stevenlawrance 1 wikitext text/x-wiki {| |valign="top"| Welcome to Moonlight Design -- the personal web site of [[Henry Lamb]] and [[Steven Lawrance]] ==Henry Lamb== [[Henry Lamb]] is a professional [http://en.wikipedia.org/wiki/Restaurant restaurateur] trained in both [http://www.baychef.com/programs/hospitality_and_restaurant.asp restaurant management] and [http://www.baychef.com/programs/culinary_arts.asp culinary arts] at the [http://www.baychef.com/ California Culinary Academy]. For a few years from the late 1990s to the early 2000s, Henry was a [http://en.wikipedia.org/wiki/Graphic_designer graphic designer] trained at the [http://www.artinstitutes.edu/sanfrancisco/ Art Institute of San Francisco] and the [http://www.academyart.edu/ Academy of Art University] Visit Henry's new wine site: [http://glassofgrape.com/ Glass of Grape] ==Steven Lawrance== [[Steven Lawrance]] is an active practitioner of [http://en.wikipedia.org/wiki/Software_engineering software engineering] and [http://en.wikipedia.org/wiki/Open-source_software open-source software enthusiast] trained in [http://www.mse.cs.cmu.edu/ software engineering] at [http://www.mse.cs.cmu.edu/ Carnegie Mellon University] and [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ business administration] with [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems computer information systems] at [http://www.bryant.edu/ Bryant University] [[Steven Lawrance#Software Project Experience|Check out the list of software that Steve has either written or contributed to]] |valign="top" width="25%"| {|border="1" | <font size="5">[https://www.moonlightdesign.org/urllock/ IE URL Lock]</font> <font size="5">[http://gnucashtoqif.sourceforge.net/ GnuCashToQIF]</font> <font size="3">[https://www.moonlightdesign.org/dirlist DirList] [[CompactOnDelete]]</font> <font size="3">[[PortProxy]]</font> <font size="2">[[Serendipity|Team Serendipity]]</font> <font size="2">[[Disk Imager]]</font> <font size="1">[[ScreenWindowX]]</font> |} <small>[https://www.moonlightdesign.org/wireless/ Guest wireless network sign-up] (local network only)</small> |} af89d10cbb288751357fa2d41ae74293fe7b0047 Home Control 0 1444 2213 1549 2011-02-15T15:10:07Z Stevenlawrance 1 wikitext text/x-wiki {|border="0" |valign="top"|By controlling the now-obsolete [http://www.smarthome.com/manuals/MAN-1130_31p.pdf CP290 computer X-10 device], this program lets users control X-10 appliances directly and through schedules. '''[https://www.moonlightdesign.org/steve/programs/Home%20Control%2098.zip Download Program and Source Code]''' This software was originally released in 1996, and an enhanced user interface, pictured in the screen shots on this page, was released in 1998. In 2011, the program and its source were released as open source software using the [http://www.gnu.org/licenses/gpl-3.0-standalone.html GPLv3 license]. This program permits full use of the CP290's capabilities as it was written specifically for this device, though it did not implement a user interface for the CP290's "icon" memory, which was of dubious utility anyway. As far as I am aware, this program was the first Win32-based program to control the CP290 device as well as the only CP290 control program that implements non-destructive base unit house code changes. Because it was designed for the CP290, Home Control supports the control of multiple devices in the same house code simultaneously both in direct commands and in schedules, which was a rarity in CP290 control programs at the time, even though the device supports it. The architecture of Home Control splits the CP290 driver from the user interface, permitting other programs to use the DLL library to control the CP290. As far as I know, Home Control is the only front end that uses its CP290 library. This program was written during my junior year in high school for an honors physics class. I entered it into the Fort Worth Science Fair, where it won four awards. This made it eligible for entry in the Texas State Science Fair in Austin, Texas, where it was featured amongst many other innovative software projects at the time. Similar to the [[LPD]] processor for HP PCL that I wrote later, I wrote this software from the [http://www.smarthome.com/manuals/MAN-1130_31p.pdf communications specifications] that came with the CP290 device. Unfortunately, modern hardware products typically no longer ship with such documentation. {| |[[Image:Program-hc1.png|top]] [[Image:Program-hc5.png]] |[[Image:Program-hc3.png]] |} |valign="top"|[[Image:Program-hc2.png]] [[Image:Program-hc4.png]] [[Image:Program-hc6.png]] |} 779979e84aac76f4187c4c68e3565a99118d43ad MediaWiki:Common.js 8 1417 2214 1962 2011-04-30T16:35:38Z Stevenlawrance 1 javascript text/javascript /* Any JavaScript here will be loaded for all users on every page load. */ // Highlight every other line in the software tables var orig_onload = window.onload; window.onload = function(e) { if (orig_onload != null) { orig_onload(e); } var tables = document.getElementsByTagName("table"); var rows; for (var t = 0; t < tables.length; t++) { if (tables[t].className.indexOf("software") >= 0 && tables[t].rows && tables[t].rows.length > 1) { grayRows(tables[t]); // Give the third-to-last cell a width of 15em (CSS lets us do this, but, sadly, browsers don't implement nth-child) // and the second-to-last cell a width of 6em rows = tables[t].rows; for (var r = 0; r < rows.length; r++) { if (rows[r].lastChild && rows[r].lastChild.previousSibling) { var secondToLast = rows[r].lastChild.previousSibling; secondToLast.style.width = "6em"; if (secondToLast.tagName.toLowerCase() == "td") { secondToLast.style.textAlign = "right"; } if (secondToLast.previousSibling) { secondToLast.previousSibling.style.width = "15em"; } } } } } } function grayRows(table) { var rows = table.rows; for (var r = 0; r < rows.length; r++) { if (r % 2 == 1) { rows[r].className = "grayrow"; } else { rows[r].className = ""; } } } var orig_ts_resortTable = ts_resortTable; ts_resortTable = function(evt) { orig_ts_resortTable(evt); // Find the table var table = evt; while (table && table.tagName.toLowerCase() != "table") { table = table.parentNode; } if (table && (table.className.indexOf("software") >= 0)) { grayRows(table); } } 4f6d5bde75f31f566c0f77eb9d6bf3b6e7b0225b 2215 2214 2011-04-30T16:36:30Z Stevenlawrance 1 javascript text/javascript /* Any JavaScript here will be loaded for all users on every page load. */ // Highlight every other line in the software tables var orig_onload = window.onload; window.onload = function(e) { if (orig_onload != null) { orig_onload(e); } var tables = document.getElementsByTagName("table"); var rows; for (var t = 0; t < tables.length; t++) { if (tables[t].className.indexOf("software") >= 0 && tables[t].rows && tables[t].rows.length > 1) { grayRows(tables[t]); // Give the third-to-last cell a width of 15em (CSS lets us do this, but, sadly, browsers don't implement nth-child) // and the second-to-last cell a width of 6em rows = tables[t].rows; for (var r = 0; r < rows.length; r++) { if (rows[r].lastChild && rows[r].lastChild.previousSibling) { var secondToLast = rows[r].lastChild.previousSibling; if (!secondToLast.style) { alert(secondToLast); } secondToLast.style.width = "6em"; if (secondToLast.tagName.toLowerCase() == "td") { secondToLast.style.textAlign = "right"; } if (secondToLast.previousSibling) { secondToLast.previousSibling.style.width = "15em"; } } } } } } function grayRows(table) { var rows = table.rows; for (var r = 0; r < rows.length; r++) { if (r % 2 == 1) { rows[r].className = "grayrow"; } else { rows[r].className = ""; } } } var orig_ts_resortTable = ts_resortTable; ts_resortTable = function(evt) { orig_ts_resortTable(evt); // Find the table var table = evt; while (table && table.tagName.toLowerCase() != "table") { table = table.parentNode; } if (table && (table.className.indexOf("software") >= 0)) { grayRows(table); } } a158e9c59e3156885d3ddf351bf9cf58f1349027 2216 2215 2011-04-30T16:37:12Z Stevenlawrance 1 javascript text/javascript /* Any JavaScript here will be loaded for all users on every page load. */ // Highlight every other line in the software tables var orig_onload = window.onload; window.onload = function(e) { if (orig_onload != null) { orig_onload(e); } var tables = document.getElementsByTagName("table"); var rows; for (var t = 0; t < tables.length; t++) { if (tables[t].className.indexOf("software") >= 0 && tables[t].rows && tables[t].rows.length > 1) { grayRows(tables[t]); // Give the third-to-last cell a width of 15em (CSS lets us do this, but, sadly, browsers don't implement nth-child) // and the second-to-last cell a width of 6em rows = tables[t].rows; for (var r = 0; r < rows.length; r++) { if (rows[r].lastChild && rows[r].lastChild.previousSibling) { var secondToLast = rows[r].lastChild.previousSibling; if (secondToLast.style) { secondToLast.style.width = "6em"; if (secondToLast.tagName.toLowerCase() == "td") { secondToLast.style.textAlign = "right"; } if (secondToLast.previousSibling) { secondToLast.previousSibling.style.width = "15em"; } } } } } } } function grayRows(table) { var rows = table.rows; for (var r = 0; r < rows.length; r++) { if (r % 2 == 1) { rows[r].className = "grayrow"; } else { rows[r].className = ""; } } } var orig_ts_resortTable = ts_resortTable; ts_resortTable = function(evt) { orig_ts_resortTable(evt); // Find the table var table = evt; while (table && table.tagName.toLowerCase() != "table") { table = table.parentNode; } if (table && (table.className.indexOf("software") >= 0)) { grayRows(table); } } 527452aa5fec2d1a06a7daf60757007b58483e4e Steven Lawrance 0 1409 2217 2208 2011-05-15T14:28:38Z Stevenlawrance 1 /* Team software */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Team software|Software Built in a Team]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software that I created|Software Built by Just Me]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Network:''' [http://www.linkedin.com/in/meowmeow LinkedIn] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.salesforce.com/ Salesforce.com]||Web-based business software platform and suite of integrated business applications. For Salesforce.com, I integrated the low-level parts of Siteforce into the core Salesforce.com product; wrote Siteforce's Resin and runtime server configurations; became a lead subject matter expert across R&D on TLS, SSL, and IPv6; wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests; improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization; enhanced an internal production server testing tool's user interface and configuration system; added per-window screenshots to an internal testing tool by extending Selenium with JNI native code; and ensured that new releases of the core product did not break older API versions.||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:Selenium}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}||large||2007-2011 |- |[[Reggie/CIS]]||A 200-user multi-tenant three-tiered HIV/AIDS client database system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used.||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Donor and fundraising event management system used by the San Francisco AIDS Foundation. I migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization. In this project, I integrated a Windows-based three-dimensional visualization program into an Eclipse view, kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project, and automated our data collection and reporting processes to minimize project overhead work. This group project involved four other students -- two whom also work at Salesforce.com -- and served as a laboratory for us to directly apply coursework to a software project with a real client throughout our software engineering masters' programs.||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project.||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features.||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||Intranet system for Ariesnet, Inc. During the Summer of 1999, I helped shape the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments.||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind.||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,607||2005-2010 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface.||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel.||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF or an IIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system.||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server.||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list].||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS].||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction.||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||Web site for the [http://web.bryant.edu/~pride/ Bryant PRIDE] LGBT group. In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced the web site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}.||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface.||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context.||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95].||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI].||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete.||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own.||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities.||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished.||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list].||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant.||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon significantly. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: [http://developer.force.com/sites Force.com Sites], Core Infrastructure, Security, and [http://wiki.developerforce.com/index.php/Web_Services_API API] Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure. A security research firm later commended Salesforce.com's security, saying that they couldn't find any XSS or cross site request forgery (CSRF) vulnerabilities, despite looking for them over the course of several days. **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming a go-to person for HTTPS and SSL **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls], which helped quickly bring that feature to market with confidence in its quality and security **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface of, added Apache Ant build files to, significantly improved the configuration system of, and added multiple-window browser screenshots to an internal production testing tool that is used by multiple teams **Created and automated anti-phishing and security test scenarios **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support. **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based [[PDF Access Reports|PDF reports]] using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager and, via rotation, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame. **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error. **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project. *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 4ffdcc181200780056acd07b89ba219b98440755 2218 2217 2011-05-15T14:30:34Z Stevenlawrance 1 /* Team software */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Team software|Software Built in a Team]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software that I created|Software Built by Just Me]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Network:''' [http://www.linkedin.com/in/meowmeow LinkedIn] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.salesforce.com/ Salesforce.com]||Web-based business software platform and suite of integrated business applications. I integrated the low-level parts of Siteforce into the core Salesforce.com product; wrote Siteforce's Resin and runtime server configurations; became a lead subject matter expert across R&D on TLS, SSL, and IPv6; wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests; improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization; enhanced an internal production server testing tool's user interface and configuration system; and added per-window screenshots to an internal testing tool by extending Selenium with JNI native code.||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:Selenium}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}||large||2007-2011 |- |[[Reggie/CIS]]||A 200-user multi-tenant three-tiered HIV/AIDS client database system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used.||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Donor and fundraising event management system used by the San Francisco AIDS Foundation. I migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization. In this project, I integrated a Windows-based three-dimensional visualization program into an Eclipse view, kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project, and automated our data collection and reporting processes to minimize project overhead work. This group project involved four other students -- two whom also work at Salesforce.com -- and served as a laboratory for us to directly apply coursework to a software project with a real client throughout our software engineering masters' programs.||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project.||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features.||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||Intranet system for Ariesnet, Inc. During the Summer of 1999, I helped shape the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments.||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind.||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,607||2005-2010 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface.||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel.||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF or an IIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system.||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server.||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list].||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS].||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction.||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||Web site for the [http://web.bryant.edu/~pride/ Bryant PRIDE] LGBT group. In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced the web site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}.||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface.||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context.||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95].||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI].||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete.||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own.||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities.||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished.||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list].||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant.||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon significantly. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: [http://developer.force.com/sites Force.com Sites], Core Infrastructure, Security, and [http://wiki.developerforce.com/index.php/Web_Services_API API] Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure. A security research firm later commended Salesforce.com's security, saying that they couldn't find any XSS or cross site request forgery (CSRF) vulnerabilities, despite looking for them over the course of several days. **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming a go-to person for HTTPS and SSL **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls], which helped quickly bring that feature to market with confidence in its quality and security **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface of, added Apache Ant build files to, significantly improved the configuration system of, and added multiple-window browser screenshots to an internal production testing tool that is used by multiple teams **Created and automated anti-phishing and security test scenarios **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support. **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based [[PDF Access Reports|PDF reports]] using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager and, via rotation, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame. **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error. **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project. *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 123b435046822f9bc3fac8700c4568537079d194 2233 2218 2012-05-11T14:41:41Z Stevenlawrance 1 /* Team software */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Team software|Software Built in a Team]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software that I created|Software Built by Just Me]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Network:''' [http://www.linkedin.com/in/meowmeow LinkedIn] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.salesforce.com/ Salesforce.com]||Web-based business software platform and suite of integrated business applications. I integrated the low-level parts of Siteforce into the core Salesforce.com product; wrote Siteforce's Resin and runtime server configurations; became a lead subject matter expert across R&D on TLS, SSL, and IPv6; wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests; improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization; enhanced an internal production server testing tool's user interface and configuration system; and added per-window screenshots to an internal testing tool by extending Selenium with JNI native code.||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:Selenium}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}||large||2007-2012 |- |[[Reggie/CIS]]||A 200-user multi-tenant three-tiered HIV/AIDS client database system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used.||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Donor and fundraising event management system used by the San Francisco AIDS Foundation. I migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization. In this project, I integrated a Windows-based three-dimensional visualization program into an Eclipse view, kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project, and automated our data collection and reporting processes to minimize project overhead work. This group project involved four other students -- two whom also work at Salesforce.com -- and served as a laboratory for us to directly apply coursework to a software project with a real client throughout our software engineering masters' programs.||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project.||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features.||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||Intranet system for Ariesnet, Inc. During the Summer of 1999, I helped shape the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments.||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind.||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,607||2005-2010 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface.||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel.||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF or an IIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system.||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server.||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list].||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS].||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction.||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||Web site for the [http://web.bryant.edu/~pride/ Bryant PRIDE] LGBT group. In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced the web site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}.||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface.||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context.||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95].||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI].||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete.||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own.||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities.||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished.||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list].||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant.||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon significantly. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: [http://developer.force.com/sites Force.com Sites], Core Infrastructure, Security, and [http://wiki.developerforce.com/index.php/Web_Services_API API] Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure. A security research firm later commended Salesforce.com's security, saying that they couldn't find any XSS or cross site request forgery (CSRF) vulnerabilities, despite looking for them over the course of several days. **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming a go-to person for HTTPS and SSL **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls], which helped quickly bring that feature to market with confidence in its quality and security **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface of, added Apache Ant build files to, significantly improved the configuration system of, and added multiple-window browser screenshots to an internal production testing tool that is used by multiple teams **Created and automated anti-phishing and security test scenarios **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support. **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based [[PDF Access Reports|PDF reports]] using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager and, via rotation, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame. **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error. **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project. *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] ff142d3994b7ecf2f6f16895ac291e038141f851 2234 2233 2012-05-11T14:42:01Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Team software|Software Built in a Team]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software that I created|Software Built by Just Me]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Network:''' [http://www.linkedin.com/in/meowmeow LinkedIn] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.salesforce.com/ Salesforce.com]||Web-based business software platform and suite of integrated business applications. I integrated the low-level parts of Siteforce into the core Salesforce.com product; wrote Siteforce's Resin and runtime server configurations; became a lead subject matter expert across R&D on TLS, SSL, and IPv6; wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests; improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization; enhanced an internal production server testing tool's user interface and configuration system; and added per-window screenshots to an internal testing tool by extending Selenium with JNI native code.||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:Selenium}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}||large||2007-2012 |- |[[Reggie/CIS]]||A 200-user multi-tenant three-tiered HIV/AIDS client database system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used.||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Donor and fundraising event management system used by the San Francisco AIDS Foundation. I migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization. In this project, I integrated a Windows-based three-dimensional visualization program into an Eclipse view, kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project, and automated our data collection and reporting processes to minimize project overhead work. This group project involved four other students -- two whom also work at Salesforce.com -- and served as a laboratory for us to directly apply coursework to a software project with a real client throughout our software engineering masters' programs.||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project.||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features.||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||Intranet system for Ariesnet, Inc. During the Summer of 1999, I helped shape the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments.||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind.||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,607||2005-2012 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface.||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel.||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF or an IIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system.||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server.||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list].||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS].||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction.||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||Web site for the [http://web.bryant.edu/~pride/ Bryant PRIDE] LGBT group. In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced the web site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}.||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface.||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context.||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95].||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI].||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete.||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own.||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities.||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished.||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list].||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant.||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon significantly. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: [http://developer.force.com/sites Force.com Sites], Core Infrastructure, Security, and [http://wiki.developerforce.com/index.php/Web_Services_API API] Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure. A security research firm later commended Salesforce.com's security, saying that they couldn't find any XSS or cross site request forgery (CSRF) vulnerabilities, despite looking for them over the course of several days. **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming a go-to person for HTTPS and SSL **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls], which helped quickly bring that feature to market with confidence in its quality and security **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface of, added Apache Ant build files to, significantly improved the configuration system of, and added multiple-window browser screenshots to an internal production testing tool that is used by multiple teams **Created and automated anti-phishing and security test scenarios **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support. **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based [[PDF Access Reports|PDF reports]] using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager and, via rotation, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame. **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error. **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project. *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 92da6c49fe7ada12cfeb2b937e690eee77a97cb1 2236 2234 2013-10-26T17:41:22Z Stevenlawrance 1 /* Team software */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Team software|Software Built in a Team]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software that I created|Software Built by Just Me]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Network:''' [http://www.linkedin.com/in/meowmeow LinkedIn] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.salesforce.com/ Salesforce.com]||Web-based business software platform and suite of integrated business applications. I integrated the low-level parts of Siteforce into the core Salesforce.com product; wrote Siteforce's Resin and runtime server configurations; became a lead subject matter expert across R&D on TLS, SSL, and IPv6; wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests; improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization; enhanced an internal production server testing tool's user interface and configuration system; and added per-window screenshots to an internal testing tool by extending Selenium with JNI native code.||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:Selenium}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}||large||2007-current |- |[[Reggie/CIS]]||A 200-user multi-tenant three-tiered HIV/AIDS client database system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used.||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Donor and fundraising event management system used by the San Francisco AIDS Foundation. I migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization. In this project, I integrated a Windows-based three-dimensional visualization program into an Eclipse view, kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project, and automated our data collection and reporting processes to minimize project overhead work. This group project involved four other students -- two whom also work at Salesforce.com -- and served as a laboratory for us to directly apply coursework to a software project with a real client throughout our software engineering masters' programs.||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project.||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features.||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||Intranet system for Ariesnet, Inc. During the Summer of 1999, I helped shape the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments.||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind.||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,607||2005-2012 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface.||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel.||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF or an IIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system.||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server.||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list].||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS].||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction.||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||Web site for the [http://web.bryant.edu/~pride/ Bryant PRIDE] LGBT group. In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced the web site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}.||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface.||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context.||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95].||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI].||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete.||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own.||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities.||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished.||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list].||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant.||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon significantly. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: [http://developer.force.com/sites Force.com Sites], Core Infrastructure, Security, and [http://wiki.developerforce.com/index.php/Web_Services_API API] Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure. A security research firm later commended Salesforce.com's security, saying that they couldn't find any XSS or cross site request forgery (CSRF) vulnerabilities, despite looking for them over the course of several days. **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming a go-to person for HTTPS and SSL **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls], which helped quickly bring that feature to market with confidence in its quality and security **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface of, added Apache Ant build files to, significantly improved the configuration system of, and added multiple-window browser screenshots to an internal production testing tool that is used by multiple teams **Created and automated anti-phishing and security test scenarios **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support. **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based [[PDF Access Reports|PDF reports]] using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager and, via rotation, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame. **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error. **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project. *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 9077cd8584a8db1a2127b58767c822214905171a 2237 2236 2013-11-28T04:20:09Z Stevenlawrance 1 /* Team software */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Team software|Software Built in a Team]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software that I created|Software Built by Just Me]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Network:''' [http://www.linkedin.com/in/meowmeow LinkedIn] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.salesforce.com/ Salesforce.com]||Web-based business software platform and suite of integrated business applications. During my time at Salesforce.com, I have worked on several teams -- API, Force.com Sites, Site.com, and Platform Security. Most recently, I led the implementation of custom https domains for Salesforce's site technologies, and this included tangential work, such as the domain management screens that were added in Summer '14. I've been a go-to person for several parts of the platform, and this includes Force.com Sites, the database tier of Site.com, site publishing, custom https domains, clickjack protection, inbound and outbound https connections, the reverse proxy caching layer for sites, IPv6, and our main production feature testing tool.<br><br>Earlier at Salesforce.com, I integrated the low-level parts of Siteforce into the core Salesforce.com product; wrote Siteforce's Resin and runtime server configurations; wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests; improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization; and added per-window screenshots to an internal testing tool by extending Selenium with JNI native code.||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:Selenium}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}||large||2007-current |- |[[Reggie/CIS]]||A 200-user multi-tenant three-tiered HIV/AIDS client database system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used.||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Donor and fundraising event management system used by the San Francisco AIDS Foundation. I migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization. In this project, I integrated a Windows-based three-dimensional visualization program into an Eclipse view, kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project, and automated our data collection and reporting processes to minimize project overhead work. This group project involved four other students -- two whom also work at Salesforce.com -- and served as a laboratory for us to directly apply coursework to a software project with a real client throughout our software engineering masters' programs.||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project.||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features.||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||Intranet system for Ariesnet, Inc. During the Summer of 1999, I helped shape the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments.||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind.||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,607||2005-2012 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface.||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel.||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF or an IIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system.||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server.||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list].||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS].||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction.||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||Web site for the [http://web.bryant.edu/~pride/ Bryant PRIDE] LGBT group. In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced the web site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}.||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface.||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context.||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95].||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI].||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete.||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own.||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities.||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished.||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list].||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant.||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon significantly. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: [http://developer.force.com/sites Force.com Sites], Core Infrastructure, Security, and [http://wiki.developerforce.com/index.php/Web_Services_API API] Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure. A security research firm later commended Salesforce.com's security, saying that they couldn't find any XSS or cross site request forgery (CSRF) vulnerabilities, despite looking for them over the course of several days. **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming a go-to person for HTTPS and SSL **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls], which helped quickly bring that feature to market with confidence in its quality and security **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface of, added Apache Ant build files to, significantly improved the configuration system of, and added multiple-window browser screenshots to an internal production testing tool that is used by multiple teams **Created and automated anti-phishing and security test scenarios **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support. **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based [[PDF Access Reports|PDF reports]] using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager and, via rotation, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame. **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error. **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project. *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 2ca5b080dcafde8628765cd22777e8853b7c1059 2238 2237 2013-11-28T04:21:49Z Stevenlawrance 1 /* Team software */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Team software|Software Built in a Team]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software that I created|Software Built by Just Me]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Network:''' [http://www.linkedin.com/in/meowmeow LinkedIn] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.salesforce.com/ Salesforce.com]||Web-based business software platform and suite of integrated business applications. During my time at Salesforce.com, I have worked on several teams -- API, Force.com Sites, Site.com, and Platform Security. Most recently, I led the implementation of custom https domains for Salesforce's site technologies, and this included tangential work, such as the domain management screens that were added in Summer '14. I've been a go-to person for several parts of the platform, and this includes Force.com Sites, the database tier of Site.com, site publishing, custom https domains, clickjack protection, inbound and outbound https connections, the reverse proxy caching layer for sites, IPv6, and our main production feature testing tool.<br><br>Earlier at Salesforce.com, I integrated the low-level parts of Siteforce into the core Salesforce.com product; wrote Siteforce's Resin and runtime server configurations; wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests; improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization; and added per-window screenshots to an internal testing tool by extending Selenium with JNI native code.||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:Selenium}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Jetty}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}||large||2007-current |- |[[Reggie/CIS]]||A 200-user multi-tenant three-tiered HIV/AIDS client database system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used.||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Donor and fundraising event management system used by the San Francisco AIDS Foundation. I migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization. In this project, I integrated a Windows-based three-dimensional visualization program into an Eclipse view, kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project, and automated our data collection and reporting processes to minimize project overhead work. This group project involved four other students -- two whom also work at Salesforce.com -- and served as a laboratory for us to directly apply coursework to a software project with a real client throughout our software engineering masters' programs.||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project.||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features.||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||Intranet system for Ariesnet, Inc. During the Summer of 1999, I helped shape the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments.||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind.||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,607||2005-2012 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface.||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel.||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF or an IIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system.||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server.||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list].||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS].||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction.||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||Web site for the [http://web.bryant.edu/~pride/ Bryant PRIDE] LGBT group. In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced the web site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}.||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface.||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context.||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95].||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI].||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete.||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own.||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities.||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished.||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list].||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant.||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon significantly. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: [http://developer.force.com/sites Force.com Sites], Core Infrastructure, Security, and [http://wiki.developerforce.com/index.php/Web_Services_API API] Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure. A security research firm later commended Salesforce.com's security, saying that they couldn't find any XSS or cross site request forgery (CSRF) vulnerabilities, despite looking for them over the course of several days. **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming a go-to person for HTTPS and SSL **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls], which helped quickly bring that feature to market with confidence in its quality and security **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface of, added Apache Ant build files to, significantly improved the configuration system of, and added multiple-window browser screenshots to an internal production testing tool that is used by multiple teams **Created and automated anti-phishing and security test scenarios **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support. **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based [[PDF Access Reports|PDF reports]] using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager and, via rotation, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame. **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error. **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project. *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 11fdb36221eb4a61207b2effde2ddde84a4aee5b 2240 2238 2013-11-28T04:31:59Z Stevenlawrance 1 /* Team software */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Team software|Software Built in a Team]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software that I created|Software Built by Just Me]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Network:''' [http://www.linkedin.com/in/meowmeow LinkedIn] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.salesforce.com/ Salesforce.com]||Web-based business software platform and suite of integrated business applications. During my time at Salesforce.com, I have worked on several teams -- API, Force.com Sites, Site.com, and Platform Security. Most recently, I led the implementation of custom https domains for Salesforce's site technologies, and this included tangential work, such as the domain management screens that were added in Summer '14. I've been a go-to person for several parts of the platform, and this includes Force.com Sites, the database tier of Site.com, site publishing, custom https domains, clickjack protection, inbound and outbound https connections, the reverse proxy caching layer for sites, IPv6, and our main production feature testing tool.<br><br>At Salesforce.com's Dreamforce 2013 conference, I presented a [http://www.youtube.com/watch?v=Z7L1pSfcCJc session on the lessons learned while developing a Force.com solution] to replace an older Microsoft Access solution for the San Francisco AIDS Foundation.<br><br>Earlier at Salesforce.com, I integrated the low-level parts of Siteforce into the core Salesforce.com product; wrote Siteforce's Resin and runtime server configurations; wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests; improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization; and added per-window screenshots to an internal testing tool by extending Selenium with JNI native code.||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:Selenium}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Jetty}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}||large||2007-current |- |[[Reggie/CIS]]||A 200-user multi-tenant three-tiered HIV/AIDS client database system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used.||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Donor and fundraising event management system used by the San Francisco AIDS Foundation. I migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization. In this project, I integrated a Windows-based three-dimensional visualization program into an Eclipse view, kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project, and automated our data collection and reporting processes to minimize project overhead work. This group project involved four other students -- two whom also work at Salesforce.com -- and served as a laboratory for us to directly apply coursework to a software project with a real client throughout our software engineering masters' programs.||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project.||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features.||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||Intranet system for Ariesnet, Inc. During the Summer of 1999, I helped shape the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments.||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind.||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,607||2005-2012 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface.||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel.||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[http://gnucashtoqif.sourceforge.net/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF or an IIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system.||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server.||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list].||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS].||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction.||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||Web site for the [http://web.bryant.edu/~pride/ Bryant PRIDE] LGBT group. In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced the web site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}.||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface.||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context.||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95].||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI].||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete.||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own.||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities.||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished.||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list].||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant.||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon significantly. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: [http://developer.force.com/sites Force.com Sites], Core Infrastructure, Security, and [http://wiki.developerforce.com/index.php/Web_Services_API API] Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure. A security research firm later commended Salesforce.com's security, saying that they couldn't find any XSS or cross site request forgery (CSRF) vulnerabilities, despite looking for them over the course of several days. **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming a go-to person for HTTPS and SSL **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls], which helped quickly bring that feature to market with confidence in its quality and security **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface of, added Apache Ant build files to, significantly improved the configuration system of, and added multiple-window browser screenshots to an internal production testing tool that is used by multiple teams **Created and automated anti-phishing and security test scenarios **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support. **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based [[PDF Access Reports|PDF reports]] using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager and, via rotation, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame. **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error. **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project. *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 9740b3dc561f155058542d7609803c6adc557693 MediaWiki:Common.css 8 1418 2219 1633 2011-05-16T02:25:46Z Stevenlawrance 1 css text/css /** CSS placed here will be applied to all skins */ table.software { border-width: 1px; border-spacing: 0px; border-style: outset; border-color: black; border-collapse: separate; background-color: white; } table.software tr td[2] { width: 100em; } table.software td { vertical-align: top; } table.software td:first-child { width: 10em; } table.software td:last-child { width: 5em; } table.software td:not(last-child) { padding-right: 1em; border-width: 0px 1px 0px 0px; border-style: inset inset inset inset; border-color: gray black gray gray; } table.software th { vertical-align: top; padding-right: 1em; border-width: 0px 1px 1px 0px; border-style: inset inset inset inset; border-color: gray black black gray; } tr.grayrow { background-color: #eaeaea; } 0c8e668cb4f7368b25614854f316d1756b9048de 2220 2219 2011-05-16T02:28:11Z Stevenlawrance 1 css text/css /** CSS placed here will be applied to all skins */ table.software { border-width: 1px; border-spacing: 0px; border-style: outset; border-color: black; border-collapse: separate; background-color: white; } table.software td:nth-child(2) { width: 100em; } table.software td { vertical-align: top; } table.software td:first-child { width: 10em; } table.software td:last-child { width: 5em; } table.software td:not(last-child) { padding-right: 1em; border-width: 0px 1px 0px 0px; border-style: inset inset inset inset; border-color: gray black gray gray; } table.software th { vertical-align: top; padding-right: 1em; border-width: 0px 1px 1px 0px; border-style: inset inset inset inset; border-color: gray black black gray; } tr.grayrow { background-color: #eaeaea; } 2c72989a3e59a0b34ac059336f928297f5932dc8 2221 2220 2011-05-16T02:29:10Z Stevenlawrance 1 css text/css /** CSS placed here will be applied to all skins */ table.software { border-width: 1px; border-spacing: 0px; border-style: outset; border-color: black; border-collapse: separate; background-color: white; } table.software td:nth-child(2) { width: 50em; } table.software td { vertical-align: top; } table.software td:first-child { width: 10em; } table.software td:last-child { width: 5em; } table.software td:not(last-child) { padding-right: 1em; border-width: 0px 1px 0px 0px; border-style: inset inset inset inset; border-color: gray black gray gray; } table.software th { vertical-align: top; padding-right: 1em; border-width: 0px 1px 1px 0px; border-style: inset inset inset inset; border-color: gray black black gray; } tr.grayrow { background-color: #eaeaea; } 6e172690934ae99d3e138b24424301fe3f76195a 2222 2221 2011-05-16T02:30:09Z Stevenlawrance 1 css text/css /** CSS placed here will be applied to all skins */ table.software { border-width: 1px; border-spacing: 0px; border-style: outset; border-color: black; border-collapse: separate; background-color: white; max-width: 100em; } /*table.software td:nth-child(2) { width: 50em; }*/ table.software td { vertical-align: top; } table.software td:first-child { width: 10em; } table.software td:last-child { width: 5em; } table.software td:not(last-child) { padding-right: 1em; border-width: 0px 1px 0px 0px; border-style: inset inset inset inset; border-color: gray black gray gray; } table.software th { vertical-align: top; padding-right: 1em; border-width: 0px 1px 1px 0px; border-style: inset inset inset inset; border-color: gray black black gray; } tr.grayrow { background-color: #eaeaea; } 5fcd86d85672a45990783b81d7f4e5e25a30e78e 2223 2222 2011-05-16T02:31:18Z Stevenlawrance 1 css text/css /** CSS placed here will be applied to all skins */ table.software { border-width: 1px; border-spacing: 0px; border-style: outset; border-color: black; border-collapse: separate; background-color: white; max-width: 70em; } table.software td { vertical-align: top; } table.software td:first-child { width: 10em; } table.software td:last-child { width: 5em; } table.software td:not(last-child) { padding-right: 1em; border-width: 0px 1px 0px 0px; border-style: inset inset inset inset; border-color: gray black gray gray; } table.software th { vertical-align: top; padding-right: 1em; border-width: 0px 1px 1px 0px; border-style: inset inset inset inset; border-color: gray black black gray; } tr.grayrow { background-color: #eaeaea; } 1029f482f7094581a99fd89ba0e858a2a6d488ac 2224 2223 2011-05-16T02:32:07Z Stevenlawrance 1 css text/css /** CSS placed here will be applied to all skins */ table.software { border-width: 1px; border-spacing: 0px; border-style: outset; border-color: black; border-collapse: separate; background-color: white; max-width: 85em; margin-left: 0 auto; margin-right: 0 auto; } table.software td { vertical-align: top; } table.software td:first-child { width: 10em; } table.software td:last-child { width: 5em; } table.software td:not(last-child) { padding-right: 1em; border-width: 0px 1px 0px 0px; border-style: inset inset inset inset; border-color: gray black gray gray; } table.software th { vertical-align: top; padding-right: 1em; border-width: 0px 1px 1px 0px; border-style: inset inset inset inset; border-color: gray black black gray; } tr.grayrow { background-color: #eaeaea; } 59f0a37755a37633f0db97a75bf93cb7c61a273a 2225 2224 2011-05-16T02:34:33Z Stevenlawrance 1 css text/css /** CSS placed here will be applied to all skins */ table.software { border-width: 1px; border-spacing: 0px; border-style: outset; border-color: black; border-collapse: separate; background-color: white; max-width: 85em; margin: 0 auto; } table.software td { vertical-align: top; } table.software td:first-child { width: 10em; } table.software td:last-child { width: 5em; } table.software td:not(last-child) { padding-right: 1em; border-width: 0px 1px 0px 0px; border-style: inset inset inset inset; border-color: gray black gray gray; } table.software th { vertical-align: top; padding-right: 1em; border-width: 0px 1px 1px 0px; border-style: inset inset inset inset; border-color: gray black black gray; } tr.grayrow { background-color: #eaeaea; } d4d344df53b66438d962470e8fa83de20161e94d 2226 2225 2011-05-16T02:36:27Z Stevenlawrance 1 css text/css /** CSS placed here will be applied to all skins */ .bodyContent { max-width: 85em; margin: 0 auto; } table.software { border-width: 1px; border-spacing: 0px; border-style: outset; border-color: black; border-collapse: separate; background-color: white; max-width: 85em; margin: 0 auto; } table.software td { vertical-align: top; } table.software td:first-child { width: 10em; } table.software td:last-child { width: 5em; } table.software td:not(last-child) { padding-right: 1em; border-width: 0px 1px 0px 0px; border-style: inset inset inset inset; border-color: gray black gray gray; } table.software th { vertical-align: top; padding-right: 1em; border-width: 0px 1px 1px 0px; border-style: inset inset inset inset; border-color: gray black black gray; } tr.grayrow { background-color: #eaeaea; } d20810b293a0bec6d13102a4fa1fbf5df2793a3e 2227 2226 2011-05-16T02:36:48Z Stevenlawrance 1 css text/css /** CSS placed here will be applied to all skins */ #bodyContent { max-width: 85em; margin: 0 auto; } table.software { border-width: 1px; border-spacing: 0px; border-style: outset; border-color: black; border-collapse: separate; background-color: white; max-width: 85em; margin: 0 auto; } table.software td { vertical-align: top; } table.software td:first-child { width: 10em; } table.software td:last-child { width: 5em; } table.software td:not(last-child) { padding-right: 1em; border-width: 0px 1px 0px 0px; border-style: inset inset inset inset; border-color: gray black gray gray; } table.software th { vertical-align: top; padding-right: 1em; border-width: 0px 1px 1px 0px; border-style: inset inset inset inset; border-color: gray black black gray; } tr.grayrow { background-color: #eaeaea; } bbd0142ad4883abfa93d2f5a174aa37095928e08 2228 2227 2011-05-16T02:37:33Z Stevenlawrance 1 css text/css /** CSS placed here will be applied to all skins */ #bodyContent { max-width: 80em; margin: 0 auto; } table.software { border-width: 1px; border-spacing: 0px; border-style: outset; border-color: black; border-collapse: separate; background-color: white; } table.software td { vertical-align: top; } table.software td:first-child { width: 10em; } table.software td:last-child { width: 5em; } table.software td:not(last-child) { padding-right: 1em; border-width: 0px 1px 0px 0px; border-style: inset inset inset inset; border-color: gray black gray gray; } table.software th { vertical-align: top; padding-right: 1em; border-width: 0px 1px 1px 0px; border-style: inset inset inset inset; border-color: gray black black gray; } tr.grayrow { background-color: #eaeaea; } a94e6fc2321009c60d6c49838ae658c13b15bfce 2229 2228 2011-05-16T02:38:37Z Stevenlawrance 1 css text/css /** CSS placed here will be applied to all skins */ #bodyContent { max-width: 70em; margin: 0 auto; } table.software { border-width: 1px; border-spacing: 0px; border-style: outset; border-color: black; border-collapse: separate; background-color: white; } table.software td { vertical-align: top; } table.software td:first-child { width: 10em; } table.software td:last-child { width: 5em; } table.software td:not(last-child) { padding-right: 1em; border-width: 0px 1px 0px 0px; border-style: inset inset inset inset; border-color: gray black gray gray; } table.software th { vertical-align: top; padding-right: 1em; border-width: 0px 1px 1px 0px; border-style: inset inset inset inset; border-color: gray black black gray; } tr.grayrow { background-color: #eaeaea; } 6ab73e53ad5deaea0ec16589042494c6ad350e23 2230 2229 2011-05-16T02:48:03Z Stevenlawrance 1 css text/css /** CSS placed here will be applied to all skins */ #bodyContent, #firstHeading { max-width: 70em; margin: 0 auto; } table.software { border-width: 1px; border-spacing: 0px; border-style: outset; border-color: black; border-collapse: separate; background-color: white; } table.software td { vertical-align: top; } table.software td:first-child { width: 10em; } table.software td:last-child { width: 5em; } table.software td:not(last-child) { padding-right: 1em; border-width: 0px 1px 0px 0px; border-style: inset inset inset inset; border-color: gray black gray gray; } table.software th { vertical-align: top; padding-right: 1em; border-width: 0px 1px 1px 0px; border-style: inset inset inset inset; border-color: gray black black gray; } tr.grayrow { background-color: #eaeaea; } 9329af009faf2e1d0d398b4acf8ac5b88618d389 2231 2230 2011-05-16T02:52:05Z Stevenlawrance 1 css text/css /** CSS placed here will be applied to all skins */ #bodyContent { max-width: 70em; margin: 0 auto; } table.software { border-width: 1px; border-spacing: 0px; border-style: outset; border-color: black; border-collapse: separate; background-color: white; } table.software td { vertical-align: top; } table.software td:first-child { width: 10em; } table.software td:last-child { width: 5em; } table.software td:not(last-child) { padding-right: 1em; border-width: 0px 1px 0px 0px; border-style: inset inset inset inset; border-color: gray black gray gray; } table.software th { vertical-align: top; padding-right: 1em; border-width: 0px 1px 1px 0px; border-style: inset inset inset inset; border-color: gray black black gray; } tr.grayrow { background-color: #eaeaea; } 6ab73e53ad5deaea0ec16589042494c6ad350e23 CompactOnDelete 0 1653 2232 2204 2012-02-20T22:46:26Z Stevenlawrance 1 wikitext text/x-wiki CompactOnDelete is a Mozilla Thunderbird 2.0 and 3.0 extension that schedules IMAP folder compaction to happen when Thunderbird loses its window focus or closes after messages are removed from an IMAP folder. Only those folders with removals are compacted; other folders are left alone. This is meant to automatically make deleted messages disappear from Outlook and Outlook Web Access on an Exchange server when they are deleted in Thunderbird. Other IMAP servers don't need this extension, and the use of this extension limits your ability to undo as soon as Thunderbird loses its window focus, since compacting a folder clears the undo/redo history. *[https://www.moonlightdesign.org/compactondelete/compactondelete-0.4.8.xpi Download extension] (right-click and select "Save Link As...") *[https://www.moonlightdesign.org/compactondelete/svn/ Subversion repository] A future enhancement could involve detecting which IMAP servers are Exchange and compacting only their folders on Thunderbird's focus loss. Presently, this extension will compact any IMAP folder that gets messages deleted or moved away from it. This extension now compacts the folders that a focus loss would have compacted when Thunderbird is closed, though it presently does not work if the user uses File | Quit instead of closing the window. CompactOnDelete is distributed under the terms of the [http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License (GPL), version 2], and is copyright (c) 2008-2010 Steven Lawrance. 73e1502990172effa497f3f742a400e338b402f7 Template:Tech:Jetty 10 1657 2239 2013-11-28T04:23:02Z Stevenlawrance 1 Created page with "[http://www.eclipse.org/jetty/ Jetty]" wikitext text/x-wiki [http://www.eclipse.org/jetty/ Jetty] 3b05d4183719684f74216757516a48a4ee52bcc5 File:AddTemplate1.png 6 1658 2241 2014-10-18T16:15:59Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:AddTemplate2.png 6 1659 2242 2014-10-18T16:16:15Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:AddTemplate3.png 6 1660 2243 2014-10-18T16:16:26Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:AddTemplate4.png 6 1661 2244 2014-10-18T16:16:51Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Filtering-User.png 6 1662 2245 2014-10-18T16:17:10Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Filtering-Computer.png 6 1663 2246 2014-10-18T16:17:21Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Filtering.png 6 1664 2247 2014-10-18T16:17:30Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Policies-User.png 6 1665 2248 2014-10-18T16:17:43Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Policies-Computer.png 6 1666 2249 2014-10-18T16:18:00Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Policies-User-IE.png 6 1667 2250 2014-10-18T16:18:20Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Policies-Computer-SSLv3Client.png 6 1668 2251 2014-10-18T16:18:31Z Stevenlawrance 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 TLS-SSL-Protocols 0 1669 2252 2014-10-18T16:28:03Z Stevenlawrance 1 Initial page wikitext text/x-wiki As a way to mitigate the [https://www.openssl.org/~bodo/ssl-poodle.pdf Padding Oracle on Legacy Encryption (POODLE) attack], information technology (IT) administrators can disable all protocols older than TLSv1 via ActiveDirectory group policies. This page describes how to do this. Using the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible administrative template] with the group policy editor allows IT administrators to deploy computer-level policies that disable legacy protocols within Windows Schannel and deploy user-level policies that disable legacy protocols within Internet Explorer. Note that a computer-level disable policy for a protocol overrides Internet Explorer's configuration for that protocol. ==Installation== Save the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible administrative template] as TLS-SSL-Protocols.adm within your Windows INF folder. This is typically <code>C:\Windows\INF</code>. ==Include in a Policy== This administrative template includes two group policy targets: Computer and User. ===Computer Policies=== The Computer policies configure the Windows Schannel protocol support, which impacts client software and server software with dedicated settings for each. Internet Explorer, email software, and any program that connects to the local network or Internet and uses Windows Schannel for securing its connections are affected by the client policies. Internet Information Server, .NET server software, and any program that listens for and accepts secure connections from the local network or Internet and uses Windows Schannel for securing connections are affected by the server policies. Mozilla Firefox, Google Chrome, and Java, however, use their own software for securing connections and aren't affected by the client policies. Similarly, Java and software that uses OpenSSL (Apache, etc) or other non-Schannel software aren't affected by the server policies. d13591ff7fa3e4e112a63e52ff41d34ac6e0dfaa 2253 2252 2014-10-18T16:52:42Z Stevenlawrance 1 wikitext text/x-wiki As a way to mitigate the [https://www.openssl.org/~bodo/ssl-poodle.pdf Padding Oracle on Legacy Encryption (POODLE) attack], information technology (IT) administrators can disable all protocols older than TLSv1 via ActiveDirectory group policies. This page describes how to do this. Using the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] with the group policy editor allows IT administrators to deploy computer-level policies that disable legacy protocols within Windows Schannel and deploy user-level policies that disable legacy protocols within Internet Explorer. Note that a computer-level disable policy for a protocol overrides Internet Explorer's configuration for that protocol. This template implements [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommended registry settings to disable SSLv3]. ==Installation== Save the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] as TLS-SSL-Protocols.adm within your Windows INF folder. This is typically <code>C:\Windows\INF</code>. ==Include in a Policy== This policy template includes two group policy targets: Computer and User. ===Computer Policies=== The Computer policies configure the Windows Schannel protocol support, which impacts client software and server software with dedicated settings for each. Internet Explorer, email software, and any program that connects to the local network or Internet and uses Windows Schannel for securing its connections are affected by the client policies. Internet Information Server, .NET server software, and any program that listens for and accepts secure connections from the local network or Internet and uses Windows Schannel for securing connections are affected by the server policies. Mozilla Firefox, Google Chrome, and Java, however, use their own software for securing connections and aren't affected by the client policies. Similarly, Java and software that uses OpenSSL (Apache, etc) or other non-Schannel software aren't affected by the server policies. To get started, either create a new group policy or edit an existing group policy that applies to groups of computers. The computer policy won't have an effect if it applies only to users and not to computers. Right-click on the Computer Configuration | Administrative Templates folder. Alternatively, right-clicking on the User Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|600px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|350px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|425px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|350px]] By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the Computer Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-Computer.png|600px]] 2b30d7129c7fbcee80a0770138f3ca3cdf20bc2d 2254 2253 2014-10-18T17:04:50Z Stevenlawrance 1 wikitext text/x-wiki As a way to mitigate the [https://www.openssl.org/~bodo/ssl-poodle.pdf Padding Oracle on Legacy Encryption (POODLE) attack], information technology (IT) administrators can disable all protocols older than TLSv1 via ActiveDirectory group policies. This page describes how to do this. Using the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] with the group policy editor allows IT administrators to deploy computer-level policies that disable legacy protocols within Windows Schannel and deploy user-level policies that disable legacy protocols within Internet Explorer. Note that a computer-level disable policy for a protocol overrides Internet Explorer's configuration for that protocol. This template implements [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommended registry settings to disable SSLv3]. ==Installation== Save the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] as TLS-SSL-Protocols.adm within your Windows INF folder. This is typically <code>C:\Windows\INF</code>. ==Include in a Policy== This policy template includes two group policy targets: Computer and User. ===Computer Policies=== The Computer policies configure the Windows Schannel protocol support, which impacts client software and server software with dedicated settings for each. Internet Explorer, email software, and any program that connects to the local network or Internet and uses Windows Schannel for securing its connections are affected by the client policies. Internet Information Server, .NET server software, and any program that listens for and accepts secure connections from the local network or Internet and uses Windows Schannel for securing connections are affected by the server policies. Mozilla Firefox, Google Chrome, and Java, however, use their own software for securing connections and aren't affected by the client policies. Similarly, Java and software that uses OpenSSL (Apache, etc) or other non-Schannel software aren't affected by the server policies. To get started, either create a new group policy or edit an existing group policy that applies to groups of computers. The computer policy won't have an effect if it applies only to users and not to computers. Right-click on the Computer Configuration | Administrative Templates folder. Alternatively, right-clicking on the User Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|600px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|350px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|425px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|350px]] By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the Computer Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-Computer.png|600px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|400px]] Open the TLS/SSL Protocols folder within the Computer Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-Computer.png|600px]] If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then enable TLS 1.0 for client and server use while disabling PCT 1.0, SSL 2.0, and SSL 3.0 for client and server use. The screenshot above shows what this configuration looks like. The Group Policy Editor makes configuration convenient with the Next Setting button. Starting with the first setting, position the dialog box such that the recommendation for that setting at the top of the "Description:" line is visible. Apply that recommendation to every setting in this list, clicking Next Setting to navigate to the next setting. Click OK when done. After clicking OK, this group policy is ready to get picked up by computers upon their next application of the computer group policies to their local computer. Running gpupdate.exe on the computers that have this group policy assigned to them will cause them to pick up the change before gpupdate.exe returns. If your network is comprised entirely of Windows Server 2008 R2, Windows 7, or newer operating systems, then disabling TLS 1.0 can improve security further, though the author of this template hasn't yet tried disabling TLS 1.0 at the computer level in such a network. 24e23c0fdfe2cac31a96fb21f08812c8378510da 2255 2254 2014-10-18T17:05:17Z Stevenlawrance 1 wikitext text/x-wiki As a way to mitigate the [https://www.openssl.org/~bodo/ssl-poodle.pdf Padding Oracle on Legacy Encryption (POODLE) attack], information technology (IT) administrators can disable all protocols older than TLSv1 via ActiveDirectory group policies. This page describes how to do this. Using the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] with the group policy editor allows IT administrators to deploy computer-level policies that disable legacy protocols within Windows Schannel and deploy user-level policies that disable legacy protocols within Internet Explorer. Note that a computer-level disable policy for a protocol overrides Internet Explorer's configuration for that protocol. This template implements [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommended registry settings to disable SSLv3]. ==Installation== Save the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] as TLS-SSL-Protocols.adm within your Windows INF folder. This is typically <code>C:\Windows\INF</code>. ==Include in a Policy== This policy template includes two group policy targets: Computer and User. ===Computer Policies=== The Computer policies configure the Windows Schannel protocol support, which impacts client software and server software with dedicated settings for each. Internet Explorer, email software, and any program that connects to the local network or Internet and uses Windows Schannel for securing its connections are affected by the client policies. Internet Information Server, .NET server software, and any program that listens for and accepts secure connections from the local network or Internet and uses Windows Schannel for securing connections are affected by the server policies. Mozilla Firefox, Google Chrome, and Java, however, use their own software for securing connections and aren't affected by the client policies. Similarly, Java and software that uses OpenSSL (Apache, etc) or other non-Schannel software aren't affected by the server policies. To get started, either create a new group policy or edit an existing group policy that applies to groups of computers. The computer policy won't have an effect if it applies only to users and not to computers. Right-click on the Computer Configuration | Administrative Templates folder. Alternatively, right-clicking on the User Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|600px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|350px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|425px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|350px]] By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the Computer Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-Computer.png|600px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|300px]] Open the TLS/SSL Protocols folder within the Computer Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-Computer.png|600px]] If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then enable TLS 1.0 for client and server use while disabling PCT 1.0, SSL 2.0, and SSL 3.0 for client and server use. The screenshot above shows what this configuration looks like. The Group Policy Editor makes configuration convenient with the Next Setting button. Starting with the first setting, position the dialog box such that the recommendation for that setting at the top of the "Description:" line is visible. Apply that recommendation to every setting in this list, clicking Next Setting to navigate to the next setting. Click OK when done. After clicking OK, this group policy is ready to get picked up by computers upon their next application of the computer group policies to their local computer. Running gpupdate.exe on the computers that have this group policy assigned to them will cause them to pick up the change before gpupdate.exe returns. If your network is comprised entirely of Windows Server 2008 R2, Windows 7, or newer operating systems, then disabling TLS 1.0 can improve security further, though the author of this template hasn't yet tried disabling TLS 1.0 at the computer level in such a network. 3d4c919bb462caded9ac841b840aeda251e54aa9 2256 2255 2014-10-18T17:06:14Z Stevenlawrance 1 wikitext text/x-wiki As a way to mitigate the [https://www.openssl.org/~bodo/ssl-poodle.pdf Padding Oracle On Downgraded Legacy Encryption (POODLE) attack], information technology (IT) administrators can disable all protocols older than TLSv1 via ActiveDirectory group policies. This page describes how to do this. Using the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] with the group policy editor allows IT administrators to deploy computer-level policies that disable legacy protocols within Windows Schannel and deploy user-level policies that disable legacy protocols within Internet Explorer. Note that a computer-level disable policy for a protocol overrides Internet Explorer's configuration for that protocol. This template implements [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommended registry settings to disable SSLv3]. ==Installation== Save the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] as TLS-SSL-Protocols.adm within your Windows INF folder. This is typically <code>C:\Windows\INF</code>. ==Include in a Policy== This policy template includes two group policy targets: Computer and User. ===Computer Policies=== The Computer policies configure the Windows Schannel protocol support, which impacts client software and server software with dedicated settings for each. Internet Explorer, email software, and any program that connects to the local network or Internet and uses Windows Schannel for securing its connections are affected by the client policies. Internet Information Server, .NET server software, and any program that listens for and accepts secure connections from the local network or Internet and uses Windows Schannel for securing connections are affected by the server policies. Mozilla Firefox, Google Chrome, and Java, however, use their own software for securing connections and aren't affected by the client policies. Similarly, Java and software that uses OpenSSL (Apache, etc) or other non-Schannel software aren't affected by the server policies. To get started, either create a new group policy or edit an existing group policy that applies to groups of computers. The computer policy won't have an effect if it applies only to users and not to computers. Right-click on the Computer Configuration | Administrative Templates folder. Alternatively, right-clicking on the User Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|600px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|350px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|425px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|350px]] By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the Computer Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-Computer.png|600px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|300px]] Open the TLS/SSL Protocols folder within the Computer Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-Computer.png|600px]] If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then enable TLS 1.0 for client and server use while disabling PCT 1.0, SSL 2.0, and SSL 3.0 for client and server use. The screenshot above shows what this configuration looks like. The Group Policy Editor makes configuration convenient with the Next Setting button. Starting with the first setting, position the dialog box such that the recommendation for that setting at the top of the "Description:" line is visible. Apply that recommendation to every setting in this list, clicking Next Setting to navigate to the next setting. Click OK when done. After clicking OK, this group policy is ready to get picked up by computers upon their next application of the computer group policies to their local computer. Running gpupdate.exe on the computers that have this group policy assigned to them will cause them to pick up the change before gpupdate.exe returns. If your network is comprised entirely of Windows Server 2008 R2, Windows 7, or newer operating systems, then disabling TLS 1.0 can improve security further, though the author of this template hasn't yet tried disabling TLS 1.0 at the computer level in such a network. bea5db10948279c2c3a86f24a228253d4de52b69 2257 2256 2014-10-18T17:15:57Z Stevenlawrance 1 wikitext text/x-wiki As a way to mitigate the [https://www.openssl.org/~bodo/ssl-poodle.pdf Padding Oracle On Downgraded Legacy Encryption (POODLE) attack], information technology (IT) administrators can disable all protocols older than TLSv1 via ActiveDirectory group policies. This page describes how to do that. Using the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] with the group policy editor allows IT administrators to deploy computer-level policies that disable legacy protocols within Windows Schannel and deploy user-level policies that disable legacy protocols within Internet Explorer. Note that a computer-level disable policy for a protocol overrides Internet Explorer's configuration for that protocol. This template implements [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommended registry settings to disable SSLv3]. Please note Microsoft has a group policy setting for disabling TLS/SSL protocols in Internet Explorer, as described in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 their recommendations], but it doesn't work reliably with Internet Explorer 6 or 7. As a result, Microsoft noted in their policy template that it works only with Internet Explorer 8 and higher. If you run Internet Explorer 6 or 7, then the group policy template described on this page is a tenable option for you. ==Installation== Save the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] as TLS-SSL-Protocols.adm within your Windows INF folder. This is typically <code>C:\Windows\INF</code>. ==Include in a Policy== This policy template includes two group policy targets: Computer and User. ===Computer Policies=== The Computer policies configure the Windows Schannel protocol support, which impacts client software and server software with dedicated settings for each. Internet Explorer, email software, and any program that connects to the local network or Internet and uses Windows Schannel for securing its connections are affected by the client policies. Internet Information Server, .NET server software, and any program that listens for and accepts secure connections from the local network or Internet and uses Windows Schannel for securing connections are affected by the server policies. Mozilla Firefox, Google Chrome, and Java, however, use their own software for securing connections and aren't affected by the client policies. Similarly, Java and software that uses OpenSSL (Apache, etc) or other non-Schannel software aren't affected by the server policies. To get started, either create a new group policy or edit an existing group policy that applies to groups of computers. The computer policy won't have an effect if it applies only to users and not to computers. Right-click on the Computer Configuration | Administrative Templates folder. Alternatively, right-clicking on the User Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|600px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|350px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|425px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|350px]] By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the Computer Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-Computer.png|600px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|300px]] Open the TLS/SSL Protocols folder within the Computer Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-Computer.png|600px]] If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then enable TLS 1.0 for client and server use while disabling PCT 1.0, SSL 2.0, and SSL 3.0 for client and server use. The screenshot above shows what this configuration looks like. The Group Policy Editor makes configuration convenient with the Next Setting button. Starting with the first setting, position the dialog box such that the recommendation for that setting at the top of the "Description:" line is visible. Apply that recommendation to every setting in this list, clicking Next Setting to navigate to the next setting. Click OK when done. After clicking OK, this group policy is ready to get picked up by computers upon their next application of the computer group policies to their local computer. Running gpupdate.exe on the computers that have this group policy assigned to them will cause them to pick up the change before gpupdate.exe returns. If your network is comprised entirely of Windows Server 2008 R2, Windows 7, or newer operating systems, then disabling TLS 1.0 can improve security further, though the author of this template hasn't yet tried disabling TLS 1.0 at the computer level in such a network. ===User Policy=== The User policy configures Internet Explorer and has been tested with versions 6 and higher. If you are targeting only Internet Explorer 8 or higher, it is recommended that you instead use the group policy for disabling TLS/SSL protocols as documented in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommendations for mitigating the POODLE attack]. Microsoft's built-in group policy, however, doesn't work reliably with Internet Explorer 6 and 7. 43452af5fcf8f1e88307c8cab359a3041414e64f 2258 2257 2014-10-18T17:34:46Z Stevenlawrance 1 wikitext text/x-wiki As a way to mitigate the [https://www.openssl.org/~bodo/ssl-poodle.pdf Padding Oracle On Downgraded Legacy Encryption (POODLE) attack], information technology (IT) administrators can disable all protocols older than TLSv1 via ActiveDirectory group policies. This page describes how to do that. Using the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] with the group policy editor allows IT administrators to deploy computer-level policies that disable legacy protocols within Windows Schannel and deploy user-level policies that disable legacy protocols within Internet Explorer. Note that a computer-level disable policy for a protocol overrides Internet Explorer's configuration for that protocol. This template implements [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommended registry settings to disable SSLv3]. Please note Microsoft has a group policy setting for disabling TLS/SSL protocols in Internet Explorer, as described in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 their recommendations], but it doesn't work reliably with Internet Explorer 6 or 7. As a result, Microsoft noted in their policy template that it works only with Internet Explorer 8 and higher. If you run Internet Explorer 6 or 7, then the group policy template described on this page is a tenable option for you. The computer policies in this policy template are also useful to IT administrators whom are targeting Internet Explorer 8. ==Installation== Save the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] as TLS-SSL-Protocols.adm within your Windows INF folder. This is typically <code>C:\Windows\INF</code>. ==Include in a Policy== This policy template includes two group policy targets: Computer and User. ===Computer Policies=== The Computer policies configure the Windows Schannel protocol support, which impacts client software and server software with dedicated settings for each. Internet Explorer, email software, and any program that connects to the local network or Internet and uses Windows Schannel for securing its connections are affected by the client policies. Internet Information Server, .NET server software, and any program that listens for and accepts secure connections from the local network or Internet and uses Windows Schannel for securing connections are affected by the server policies. Mozilla Firefox, Google Chrome, and Java, however, use their own software for securing connections and aren't affected by the client policies. Similarly, Java and software that uses OpenSSL (Apache, etc) or other non-Schannel software aren't affected by the server policies. To get started, either create a new group policy or edit an existing group policy that applies to groups of computers. The computer policy won't have an effect if it applies only to users and not to computers. Right-click on the Computer Configuration | Administrative Templates folder. Alternatively, right-clicking on the User Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|600px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|350px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|425px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|350px]] By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the Computer Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-Computer.png|600px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|300px]] Open the TLS/SSL Protocols folder within the Computer Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-Computer.png|600px]] If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then enable TLS 1.0 for client and server use while disabling PCT 1.0, SSL 2.0, and SSL 3.0 for client and server use. The screenshot above shows what this configuration looks like. The Group Policy Editor makes configuration convenient with the Next Setting button. Starting with the first setting, position the dialog box such that the recommendation for that setting at the top of the "Description:" line is visible. Apply that recommendation to every setting in this list, clicking Next Setting to navigate to the next setting. Click OK when done. After clicking OK, this group policy is ready to get picked up by computers upon their next application of the computer group policies to their local computer. Running gpupdate.exe on the computers that have this group policy assigned to them will cause them to pick up the change before gpupdate.exe returns. If your network is comprised entirely of Windows Server 2008 R2, Windows 7, or newer operating systems, then disabling TLS 1.0 can improve security further, though the author of this template hasn't yet tried disabling TLS 1.0 at the computer level in such a network. ===User Policy=== The User policy configures Internet Explorer and has been tested with versions 6 and higher. If you are targeting only Internet Explorer 8 or higher, it is recommended that you instead use the group policy for disabling TLS/SSL protocols as documented in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommendations for mitigating the POODLE attack]. Microsoft's built-in group policy, however, doesn't work reliably with Internet Explorer 6 and 7. To get started, either create a new group policy or edit an existing group policy that applies to groups of users. The user policy won't have an effect if it applies only to computers and not to users. Right-click on the User Configuration | Administrative Templates folder. Alternatively, right-clicking on the Computer Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|600px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|350px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|425px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|350px]] By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the User Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-User.png|600px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|300px]] Open the TLS/SSL Protocols folder within the User Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-User.png|600px]] Edit the policy setting and choose the Enabled radio button. If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then choose the Recommended item. Although those operating systems don't implement TLS 1.1 and 1.2, enabling TLS 1.1 and 1.2 is properly ignored by those older operating systems while being enabled on Windows 7, Windows Server 2008 R2, and newer operating systems. If all systems on your network run Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier, then the Windows Vista/XP option is feasible as that enables only TLS 1.0, but it's typically best to choose Recommended as that will allow upgraded systems to prefer TLS 1.1 and 1.2. If all systems on your network run Windows 7, Windows Server 2008 R2, or newer operating systems, then the Recommended setting also works, but the Windows 7 Best Security and Windows 7 Good Security items provide stronger security. If you choose Windows 7 Best Security, then only TLS 1.2 will be used, and that will give your secure connections maximum protection against known attacks. If some web sites that your organization use support TLS 1.1 as their highest protocol, then the Windows 7 Good Security item enables TLS 1.1 while preferring TLS 1.2. Some web sites may support only TLS 1.0 as their strongest option, and working with such web sites requires choosing the Recommended item. The Insecure and Highly Insecure items should never be used for medium or long term production use. They are present primarily for testing and as a short-term fallback if needed. Don't use them unless if it's absolutely necessary for a short time period. While enabled, your secure connections will effectively be as secure as using no encryption at all, even if Internet Explorer is using TLS 1.0 or higher. It's possible for a downgrade attack to cause Internet Explorer or the remote server to drop down to SSL 3.0, and disabling SSL 3.0 entirely is an effective mitigation against a downgrade attack to SSL 3.0. [[File:Policies-User-IE.png|350px]] Click OK when done. After clicking OK, this group policy is ready to get picked up by users upon their next application of the user group policies. Having the users log out and back in or having the users run gpupdate.exe will cause them to pick up the change. f4d70a823e36385a8c22340941ba94050b3a0bf5 TLS-SSL-Protocols 0 1669 2259 2258 2014-10-18T17:36:17Z Stevenlawrance 1 wikitext text/x-wiki As a way to mitigate the [https://www.openssl.org/~bodo/ssl-poodle.pdf Padding Oracle On Downgraded Legacy Encryption (POODLE) attack], information technology (IT) administrators can disable all protocols older than TLSv1 via ActiveDirectory group policies. This page describes how to do that. Using the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] with the group policy editor allows IT administrators to deploy computer-level policies that disable legacy protocols within Windows Schannel and deploy user-level policies that disable legacy protocols within Internet Explorer. Note that a computer-level disable policy for a protocol overrides Internet Explorer's configuration for that protocol. This template implements [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommended registry settings to disable SSLv3]. Please note Microsoft has a group policy setting for disabling TLS/SSL protocols in Internet Explorer, as described in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 their recommendations], but it doesn't work reliably with Internet Explorer 6 or 7. As a result, Microsoft noted in their policy template that it works only with Internet Explorer 8 and higher. If you run Internet Explorer 6 or 7, then the group policy template described on this page is a tenable option for you. The computer policies in this policy template are also useful to IT administrators whom are targeting Internet Explorer 8. ==Installation== Save the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] as TLS-SSL-Protocols.adm within your Windows INF folder. This is typically <code>C:\Windows\INF</code>. ==Include in a Policy== This policy template includes two group policy targets: Computer and User. ===Computer Policies=== The Computer policies configure the Windows Schannel protocol support, which impacts client software and server software with dedicated settings for each. Internet Explorer, email software, and any program that connects to the local network or Internet and uses Windows Schannel for securing its connections are affected by the client policies. Internet Information Server, .NET server software, and any program that listens for and accepts secure connections from the local network or Internet and uses Windows Schannel for securing connections are affected by the server policies. Mozilla Firefox, Google Chrome, and Java, however, use their own software for securing connections and aren't affected by the client policies. Similarly, Java and software that uses OpenSSL (Apache, etc) or other non-Schannel software aren't affected by the server policies. To get started, either create a new group policy or edit an existing group policy that applies to groups of computers. The computer policy won't have an effect if it applies only to users and not to computers. Right-click on the Computer Configuration | Administrative Templates folder. Alternatively, right-clicking on the User Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|650px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|400px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|475px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|400px]] By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the Computer Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-Computer.png|650px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|350px]] Open the TLS/SSL Protocols folder within the Computer Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-Computer.png|650px]] If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then enable TLS 1.0 for client and server use while disabling PCT 1.0, SSL 2.0, and SSL 3.0 for client and server use. The screenshot above shows what this configuration looks like. The Group Policy Editor makes configuration convenient with the Next Setting button. Starting with the first setting, position the dialog box such that the recommendation for that setting at the top of the "Description:" line is visible. Apply that recommendation to every setting in this list, clicking Next Setting to navigate to the next setting. Click OK when done. After clicking OK, this group policy is ready to get picked up by computers upon their next application of the computer group policies to their local computer. Running gpupdate.exe on the computers that have this group policy assigned to them will cause them to pick up the change before gpupdate.exe returns. If your network is comprised entirely of Windows Server 2008 R2, Windows 7, or newer operating systems, then disabling TLS 1.0 can improve security further, though the author of this template hasn't yet tried disabling TLS 1.0 at the computer level in such a network. ===User Policy=== The User policy configures Internet Explorer and has been tested with versions 6 and higher. If you are targeting only Internet Explorer 8 or higher, it is recommended that you instead use the group policy for disabling TLS/SSL protocols as documented in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommendations for mitigating the POODLE attack]. Microsoft's built-in group policy, however, doesn't work reliably with Internet Explorer 6 and 7. To get started, either create a new group policy or edit an existing group policy that applies to groups of users. The user policy won't have an effect if it applies only to computers and not to users. Right-click on the User Configuration | Administrative Templates folder. Alternatively, right-clicking on the Computer Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|650px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|400px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|475px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|400px]] By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the User Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-User.png|650px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|350px]] Open the TLS/SSL Protocols folder within the User Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-User.png|650px]] Edit the policy setting and choose the Enabled radio button. If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then choose the Recommended item. Although those operating systems don't implement TLS 1.1 and 1.2, enabling TLS 1.1 and 1.2 is properly ignored by those older operating systems while being enabled on Windows 7, Windows Server 2008 R2, and newer operating systems. If all systems on your network run Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier, then the Windows Vista/XP option is feasible as that enables only TLS 1.0, but it's typically best to choose Recommended as that will allow upgraded systems to prefer TLS 1.1 and 1.2. If all systems on your network run Windows 7, Windows Server 2008 R2, or newer operating systems, then the Recommended setting also works, but the Windows 7 Best Security and Windows 7 Good Security items provide stronger security. If you choose Windows 7 Best Security, then only TLS 1.2 will be used, and that will give your secure connections maximum protection against known attacks. If some web sites that your organization use support TLS 1.1 as their highest protocol, then the Windows 7 Good Security item enables TLS 1.1 while preferring TLS 1.2. Some web sites may support only TLS 1.0 as their strongest option, and working with such web sites requires choosing the Recommended item. The Insecure and Highly Insecure items should never be used for medium or long term production use. They are present primarily for testing and as a short-term fallback if needed. Don't use them unless if it's absolutely necessary for a short time period. While enabled, your secure connections will effectively be as secure as using no encryption at all, even if Internet Explorer is using TLS 1.0 or higher. It's possible for a downgrade attack to cause Internet Explorer or the remote server to drop down to SSL 3.0, and disabling SSL 3.0 entirely is an effective mitigation against a downgrade attack to SSL 3.0. [[File:Policies-User-IE.png|400px]] Click OK when done. After clicking OK, this group policy is ready to get picked up by users upon their next application of the user group policies. Having the users log out and back in or having the users run gpupdate.exe will cause them to pick up the change. 8f25d02110900f97e6f97da8db6614eaec162604 2260 2259 2014-10-18T17:38:18Z Stevenlawrance 1 wikitext text/x-wiki As a way to mitigate the [https://www.openssl.org/~bodo/ssl-poodle.pdf Padding Oracle On Downgraded Legacy Encryption (POODLE) attack], information technology (IT) administrators can disable all protocols older than TLSv1 via ActiveDirectory group policies. This page describes how to do that. Using the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] with the group policy editor allows IT administrators to deploy computer-level policies that disable legacy protocols within Windows Schannel and deploy user-level policies that disable legacy protocols within Internet Explorer. Note that a computer-level disable policy for a protocol overrides Internet Explorer's configuration for that protocol. This template implements [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommended registry settings to disable SSLv3]. Please note Microsoft has a group policy setting for disabling TLS/SSL protocols in Internet Explorer, as described in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 their recommendations], but it doesn't work reliably with Internet Explorer 6 or 7. As a result, Microsoft noted in their policy template that it works only with Internet Explorer 8 and higher. If you run Internet Explorer 6 or 7, then the group policy template described on this page is a tenable option for you. The computer policies in this policy template are also useful to IT administrators whom are targeting Internet Explorer 8. ==Installation== Save the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] as TLS-SSL-Protocols.adm within your Windows INF folder. This is typically <code>C:\Windows\INF</code>. ==Include in a Policy== This policy template includes two group policy targets: Computer and User. ===Computer Policies=== The Computer policies configure the Windows Schannel protocol support, which impacts client software and server software with dedicated settings for each. Internet Explorer, email software, and any program that connects to the local network or Internet and uses Windows Schannel for securing its connections are affected by the client policies. Internet Information Server, .NET server software, and any program that listens for and accepts secure connections from the local network or Internet and uses Windows Schannel for securing connections are affected by the server policies. Mozilla Firefox, Google Chrome, and Java, however, use their own software for securing connections and aren't affected by the client policies. Similarly, Java and software that uses OpenSSL (Apache, etc) or other non-Schannel software aren't affected by the server policies. To get started, either create a new group policy or edit an existing group policy that applies to groups of computers. The computer policy won't have an effect if it applies only to users and not to computers. Right-click on the Computer Configuration | Administrative Templates folder. Alternatively, right-clicking on the User Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|650px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|370px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|475px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|370px]] By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the Computer Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-Computer.png|650px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|350px]] Open the TLS/SSL Protocols folder within the Computer Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-Computer.png|650px]] If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then enable TLS 1.0 for client and server use while disabling PCT 1.0, SSL 2.0, and SSL 3.0 for client and server use. The screenshot above shows what this configuration looks like. The Group Policy Editor makes configuration convenient with the Next Setting button. Starting with the first setting, position the dialog box such that the recommendation for that setting at the top of the "Description:" line is visible. Apply that recommendation to every setting in this list, clicking Next Setting to navigate to the next setting. Click OK when done. After clicking OK, this group policy is ready to get picked up by computers upon their next application of the computer group policies to their local computer. Running gpupdate.exe on the computers that have this group policy assigned to them will cause them to pick up the change before gpupdate.exe returns. If your network is comprised entirely of Windows Server 2008 R2, Windows 7, or newer operating systems, then disabling TLS 1.0 can improve security further, though the author of this template hasn't yet tried disabling TLS 1.0 at the computer level in such a network. ===User Policy=== The User policy configures Internet Explorer and has been tested with versions 6 and higher. If you are targeting only Internet Explorer 8 or higher, it is recommended that you instead use the group policy for disabling TLS/SSL protocols as documented in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommendations for mitigating the POODLE attack]. Microsoft's built-in group policy, however, doesn't work reliably with Internet Explorer 6 and 7. To get started, either create a new group policy or edit an existing group policy that applies to groups of users. The user policy won't have an effect if it applies only to computers and not to users. Right-click on the User Configuration | Administrative Templates folder. Alternatively, right-clicking on the Computer Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|650px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|370px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|475px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|370px]] By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the User Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-User.png|650px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|350px]] Open the TLS/SSL Protocols folder within the User Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-User.png|650px]] Edit the policy setting and choose the Enabled radio button. If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then choose the Recommended item. Although those operating systems don't implement TLS 1.1 and 1.2, enabling TLS 1.1 and 1.2 is properly ignored by those older operating systems while being enabled on Windows 7, Windows Server 2008 R2, and newer operating systems. If all systems on your network run Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier, then the Windows Vista/XP option is feasible as that enables only TLS 1.0, but it's typically best to choose Recommended as that will allow upgraded systems to prefer TLS 1.1 and 1.2. If all systems on your network run Windows 7, Windows Server 2008 R2, or newer operating systems, then the Recommended setting also works, but the Windows 7 Best Security and Windows 7 Good Security items provide stronger security. If you choose Windows 7 Best Security, then only TLS 1.2 will be used, and that will give your secure connections maximum protection against known attacks. If some web sites that your organization use support TLS 1.1 as their highest protocol, then the Windows 7 Good Security item enables TLS 1.1 while preferring TLS 1.2. Some web sites may support only TLS 1.0 as their strongest option, and working with such web sites requires choosing the Recommended item. The Insecure and Highly Insecure items should never be used for medium or long term production use. They are present primarily for testing and as a short-term fallback if needed. Don't use them unless if it's absolutely necessary for a short time period. While enabled, your secure connections will effectively be as secure as using no encryption at all, even if Internet Explorer is using TLS 1.0 or higher. It's possible for a downgrade attack to cause Internet Explorer or the remote server to drop down to SSL 3.0, and disabling SSL 3.0 entirely is an effective mitigation against a downgrade attack to SSL 3.0. [[File:Policies-User-IE.png|375px]] Click OK when done. After clicking OK, this group policy is ready to get picked up by users upon their next application of the user group policies. Having the users log out and back in or having the users run gpupdate.exe will cause them to pick up the change. 64a4f3f44003f683ba901abc02fd991167007577 2261 2260 2014-10-18T17:45:18Z Stevenlawrance 1 wikitext text/x-wiki As a way to mitigate the [https://www.openssl.org/~bodo/ssl-poodle.pdf Padding Oracle On Downgraded Legacy Encryption (POODLE) attack], information technology (IT) administrators can disable all protocols older than TLSv1 via ActiveDirectory group policies. This page describes how to do that. Using the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] with the group policy editor allows IT administrators to deploy computer-level policies that disable legacy protocols within Windows Schannel and deploy user-level policies that disable legacy protocols within Internet Explorer. Note that a computer-level disable policy for a protocol overrides Internet Explorer's configuration for that protocol. This template implements [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommended registry settings to disable SSLv3]. Please note Microsoft has a group policy setting for disabling TLS/SSL protocols in Internet Explorer, as described in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 their recommendations], but it doesn't work reliably with Internet Explorer 6 or 7. As a result, Microsoft noted in their policy template that it works only with Internet Explorer 8 and higher. If you run Internet Explorer 6 or 7, then the group policy template described on this page is a tenable option for you. The computer policies in this policy template are also useful to IT administrators whom are targeting only Internet Explorer 8 or higher. ==Installation== Save the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] as TLS-SSL-Protocols.adm within your Windows INF folder. This is typically <code>C:\Windows\INF</code>. ==Include in a Policy== This policy template includes two group policy targets: Computer and User. ===Computer Policies=== The Computer policies configure the Windows Schannel protocol support, which impacts client software and server software with dedicated settings for each. Internet Explorer, email software, and any program that connects to the local network or Internet and uses Windows Schannel for securing its connections are affected by the client policies. Internet Information Server, .NET server software, and any program that listens for and accepts secure connections from the local network or Internet and uses Windows Schannel for securing connections are affected by the server policies. Mozilla Firefox, Google Chrome, and Java, however, use their own software for securing connections and aren't affected by the client policies. Similarly, Java and software that uses OpenSSL (Apache, etc) or other non-Schannel software aren't affected by the server policies. To get started, either create a new group policy or edit an existing group policy that applies to groups of computers. The computer policy won't have an effect if it applies only to users and not to computers. Right-click on the Computer Configuration | Administrative Templates folder. Alternatively, right-clicking on the User Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|650px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|370px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|475px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|370px]] By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the Computer Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-Computer.png|650px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|350px]] Open the TLS/SSL Protocols folder within the Computer Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-Computer.png|650px]] If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then enable TLS 1.0 for client and server use while disabling PCT 1.0, SSL 2.0, and SSL 3.0 for client and server use. The screenshot above shows what this configuration looks like. The Group Policy Editor makes configuration convenient with the Next Setting button. Starting with the first setting, position the dialog box such that the recommendation for that setting at the top of the "Description:" line is visible. Apply that recommendation to every setting in this list, clicking Next Setting to navigate to the next setting. Click OK when done. After clicking OK, this group policy is ready to get picked up by computers upon their next application of the computer group policies to their local computer. Running gpupdate.exe on the computers that have this group policy assigned to them will cause them to pick up the change before gpupdate.exe returns. If your network is comprised entirely of Windows Server 2008 R2, Windows 7, or newer operating systems, then disabling TLS 1.0 can improve security further, though the author of this template hasn't yet tried disabling TLS 1.0 at the computer level in such a network. ===User Policy=== The User policy configures Internet Explorer and has been tested with versions 6 and higher. If you are targeting only Internet Explorer 8 or higher, it is recommended that you instead use the group policy for disabling TLS/SSL protocols as documented in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommendations for mitigating the POODLE attack]. Microsoft's built-in group policy, however, doesn't work reliably with Internet Explorer 6 and 7. To get started, either create a new group policy or edit an existing group policy that applies to groups of users. The user policy won't have an effect if it applies only to computers and not to users. Right-click on the User Configuration | Administrative Templates folder. Alternatively, right-clicking on the Computer Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|650px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|370px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|475px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|370px]] By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the User Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-User.png|650px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|350px]] Open the TLS/SSL Protocols folder within the User Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-User.png|650px]] Edit the policy setting and choose the Enabled radio button. If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then choose the Recommended item. Although those operating systems don't implement TLS 1.1 and 1.2, enabling TLS 1.1 and 1.2 is properly ignored by those older operating systems while being enabled on Windows 7, Windows Server 2008 R2, and newer operating systems. If all systems on your network run Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier, then the Windows Vista/XP option is feasible as that enables only TLS 1.0, but it's typically best to choose Recommended as that will allow upgraded systems to prefer TLS 1.1 and 1.2. If all systems on your network run Windows 7, Windows Server 2008 R2, or newer operating systems, then the Recommended setting also works, but the Windows 7 Best Security and Windows 7 Good Security items provide stronger security. If you choose Windows 7 Best Security, then only TLS 1.2 will be used, and that will give your secure connections maximum protection against known attacks. If some web sites that your organization use support TLS 1.1 as their highest protocol, then the Windows 7 Good Security item enables TLS 1.1 while preferring TLS 1.2. Some web sites may support only TLS 1.0 as their strongest option, and working with such web sites requires choosing the Recommended item. The Insecure and Highly Insecure items should never be used for medium or long term production use. They are present primarily for testing and as a short-term fallback if needed. Don't use them unless if it's absolutely necessary for a short time period. While enabled, your secure connections will effectively be as secure as using no encryption at all, even if Internet Explorer is using TLS 1.0 or higher. It's possible for a downgrade attack to cause Internet Explorer or the remote server to drop down to SSL 3.0, and disabling SSL 3.0 entirely is an effective mitigation against a downgrade attack to SSL 3.0. [[File:Policies-User-IE.png|375px]] Click OK when done. After clicking OK, this group policy is ready to get picked up by users upon their next application of the user group policies. Having the users log out and back in or having the users run gpupdate.exe will cause them to pick up the change. 48704cf28fc678d37d304d27d5eba36e6d8036ad 2262 2261 2014-10-18T17:52:34Z Stevenlawrance 1 /* User Policy */ wikitext text/x-wiki As a way to mitigate the [https://www.openssl.org/~bodo/ssl-poodle.pdf Padding Oracle On Downgraded Legacy Encryption (POODLE) attack], information technology (IT) administrators can disable all protocols older than TLSv1 via ActiveDirectory group policies. This page describes how to do that. Using the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] with the group policy editor allows IT administrators to deploy computer-level policies that disable legacy protocols within Windows Schannel and deploy user-level policies that disable legacy protocols within Internet Explorer. Note that a computer-level disable policy for a protocol overrides Internet Explorer's configuration for that protocol. This template implements [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommended registry settings to disable SSLv3]. Please note Microsoft has a group policy setting for disabling TLS/SSL protocols in Internet Explorer, as described in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 their recommendations], but it doesn't work reliably with Internet Explorer 6 or 7. As a result, Microsoft noted in their policy template that it works only with Internet Explorer 8 and higher. If you run Internet Explorer 6 or 7, then the group policy template described on this page is a tenable option for you. The computer policies in this policy template are also useful to IT administrators whom are targeting only Internet Explorer 8 or higher. ==Installation== Save the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] as TLS-SSL-Protocols.adm within your Windows INF folder. This is typically <code>C:\Windows\INF</code>. ==Include in a Policy== This policy template includes two group policy targets: Computer and User. ===Computer Policies=== The Computer policies configure the Windows Schannel protocol support, which impacts client software and server software with dedicated settings for each. Internet Explorer, email software, and any program that connects to the local network or Internet and uses Windows Schannel for securing its connections are affected by the client policies. Internet Information Server, .NET server software, and any program that listens for and accepts secure connections from the local network or Internet and uses Windows Schannel for securing connections are affected by the server policies. Mozilla Firefox, Google Chrome, and Java, however, use their own software for securing connections and aren't affected by the client policies. Similarly, Java and software that uses OpenSSL (Apache, etc) or other non-Schannel software aren't affected by the server policies. To get started, either create a new group policy or edit an existing group policy that applies to groups of computers. The computer policy won't have an effect if it applies only to users and not to computers. Right-click on the Computer Configuration | Administrative Templates folder. Alternatively, right-clicking on the User Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|650px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|370px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|475px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|370px]] By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the Computer Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-Computer.png|650px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|350px]] Open the TLS/SSL Protocols folder within the Computer Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-Computer.png|650px]] If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then enable TLS 1.0 for client and server use while disabling PCT 1.0, SSL 2.0, and SSL 3.0 for client and server use. The screenshot above shows what this configuration looks like. The Group Policy Editor makes configuration convenient with the Next Setting button. Starting with the first setting, position the dialog box such that the recommendation for that setting at the top of the "Description:" line is visible. Apply that recommendation to every setting in this list, clicking Next Setting to navigate to the next setting. Click OK when done. After clicking OK, this group policy is ready to get picked up by computers upon their next application of the computer group policies to their local computer. Running gpupdate.exe on the computers that have this group policy assigned to them will cause them to pick up the change before gpupdate.exe returns. If your network is comprised entirely of Windows Server 2008 R2, Windows 7, or newer operating systems, then disabling TLS 1.0 can improve security further, though the author of this template hasn't yet tried disabling TLS 1.0 at the computer level in such a network. ===User Policy=== The User policy configures Internet Explorer and has been tested with versions 6 and higher. If you are targeting only Internet Explorer 8 or higher, it is recommended that you instead use the group policy for disabling TLS/SSL protocols as documented in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommendations for mitigating the POODLE attack]. Microsoft's built-in group policy, however, doesn't work reliably with Internet Explorer 6 and 7. To get started, either create a new group policy or edit an existing group policy that applies to groups of users. The user policy won't have an effect if it applies only to computers and not to users. Right-click on the User Configuration | Administrative Templates folder. Alternatively, right-clicking on the Computer Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|650px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|370px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|475px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|370px]] By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the User Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-User.png|650px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|350px]] Open the TLS/SSL Protocols folder within the User Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-User.png|650px]] Edit the policy setting and choose the Enabled radio button. If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then choose the Recommended item. Although those operating systems don't implement TLS 1.1 and 1.2, enabling TLS 1.1 and 1.2 is properly ignored by those older operating systems while being enabled on Windows 7, Windows Server 2008 R2, and newer operating systems. If all systems on your network run Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier, then the Windows Vista/XP option is feasible as that enables only TLS 1.0, but it's typically best to choose Recommended as that will allow upgraded systems to prefer TLS 1.1 and 1.2. If all systems on your network run Windows 7, Windows Server 2008 R2, or newer operating systems, then the Recommended setting works, but the Windows 7 Best Security and Windows 7 Good Security items provide stronger security. If you choose Windows 7 Best Security, then only TLS 1.2 will be used, and that will give your secure connections maximum protection against known attacks. If some web sites that your organization use support TLS 1.1 as their highest protocol, then the Windows 7 Good Security item enables TLS 1.1 while preferring TLS 1.2. Some web sites may support only TLS 1.0 as their strongest option, and working with such web sites requires choosing the Recommended item. The Insecure and Highly Insecure items should never be used for medium or long term production use. They are present primarily for testing and as a short-term fallback if needed. Don't use them unless if it's absolutely necessary for a short time period. While enabled, your secure connections will effectively be as secure as using no encryption at all, even if Internet Explorer is using TLS 1.0 or higher. It's possible for a downgrade attack to cause Internet Explorer or the remote server to drop down to SSL 3.0, and disabling SSL 3.0 entirely is an effective mitigation against a downgrade attack to SSL 3.0. [[File:Policies-User-IE.png|375px]] Click OK when done. After clicking OK, this group policy is ready to get picked up by users upon their next application of the user group policies. Having the users log out and back in or having the users run gpupdate.exe will cause them to pick up the change. d77752ac2a0248b090c17a86cb32245db818dc59 2263 2262 2014-10-18T17:55:20Z Stevenlawrance 1 wikitext text/x-wiki As a way to mitigate the [https://www.openssl.org/~bodo/ssl-poodle.pdf Padding Oracle On Downgraded Legacy Encryption (POODLE) attack], information technology (IT) administrators can disable all protocols older than TLSv1 via ActiveDirectory group policies. This page describes how to do that. Using the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] with the group policy editor allows IT administrators to deploy computer-level policies that disable legacy protocols within Windows Schannel and deploy user-level policies that disable legacy protocols within Internet Explorer. Note that a computer-level disable policy for a protocol overrides Internet Explorer's configuration for that protocol. This template implements [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommended registry settings to disable SSLv3]. Please note Microsoft has a group policy setting for disabling TLS/SSL protocols in Internet Explorer, as described in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 their recommendations], but it doesn't work reliably with Internet Explorer 6 or 7. As a result, Microsoft noted in their policy template that it works only with Internet Explorer 8 and higher. If you run Internet Explorer 6 or 7, then the group policy template described on this page is a tenable option for you. The computer policies in this policy template are also useful to IT administrators whom are targeting only Internet Explorer 8 or higher. ==Installation== Save the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] as TLS-SSL-Protocols.adm within your Windows INF folder. This is typically <code>C:\Windows\INF</code>. ==Include in a Policy== This policy template includes two group policy targets: Computer and User. ===Computer Policies=== The Computer policies configure the Windows Schannel protocol support, which impacts client software and server software with dedicated settings for each. Internet Explorer, email software, and any program that connects to the local network or Internet and uses Windows Schannel for securing its connections are affected by the client policies. Internet Information Server, .NET server software, and any program that listens for and accepts secure connections from the local network or Internet and uses Windows Schannel for securing connections are affected by the server policies. Mozilla Firefox, Google Chrome, and Java, however, use their own software for securing connections and aren't affected by the client policies. Similarly, Java and software that uses OpenSSL (Apache, etc) or other non-Schannel software aren't affected by the server policies. To get started, either create a new group policy or edit an existing group policy that applies to groups of computers. The computer policy won't have an effect if it applies only to users and not to computers. ====Add the Policy Template==== Right-click on the Computer Configuration | Administrative Templates folder. Alternatively, right-clicking on the User Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|650px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|370px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|475px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|370px]] ====Show All Policy Settings==== By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the Computer Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-Computer.png|650px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|350px]] ====TLS/SSL Protocols==== Open the TLS/SSL Protocols folder within the Computer Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-Computer.png|650px]] If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then enable TLS 1.0 for client and server use while disabling PCT 1.0, SSL 2.0, and SSL 3.0 for client and server use. The screenshot above shows what this configuration looks like. The Group Policy Editor makes configuration convenient with the Next Setting button. Starting with the first setting, position the dialog box such that the recommendation for that setting at the top of the "Description:" line is visible. Apply that recommendation to every setting in this list, clicking Next Setting to navigate to the next setting. Click OK when done. After clicking OK, this group policy is ready to get picked up by computers upon their next application of the computer group policies to their local computer. Running gpupdate.exe on the computers that have this group policy assigned to them will cause them to pick up the change before gpupdate.exe returns. If your network is comprised entirely of Windows Server 2008 R2, Windows 7, or newer operating systems, then disabling TLS 1.0 can improve security further, though the author of this template hasn't yet tried disabling TLS 1.0 at the computer level in such a network. ===User Policy=== The User policy configures Internet Explorer and has been tested with versions 6 and higher. If you are targeting only Internet Explorer 8 or higher, it is recommended that you instead use the group policy for disabling TLS/SSL protocols as documented in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommendations for mitigating the POODLE attack]. Microsoft's built-in group policy, however, doesn't work reliably with Internet Explorer 6 and 7. To get started, either create a new group policy or edit an existing group policy that applies to groups of users. The user policy won't have an effect if it applies only to computers and not to users. ====Add the Policy Template==== Right-click on the User Configuration | Administrative Templates folder. Alternatively, right-clicking on the Computer Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|650px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|370px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|475px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|370px]] ====Show All Policy Settings==== By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the User Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-User.png|650px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|350px]] ====TLS/SSL Protocols==== Open the TLS/SSL Protocols folder within the User Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-User.png|650px]] Edit the policy setting and choose the Enabled radio button. If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then choose the Recommended item. Although those operating systems don't implement TLS 1.1 and 1.2, enabling TLS 1.1 and 1.2 is properly ignored by those older operating systems while being enabled on Windows 7, Windows Server 2008 R2, and newer operating systems. If all systems on your network run Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier, then the Windows Vista/XP option is feasible as that enables only TLS 1.0, but it's typically best to choose Recommended as that will allow upgraded systems to prefer TLS 1.1 and 1.2. If all systems on your network run Windows 7, Windows Server 2008 R2, or newer operating systems, then the Recommended setting works, but the Windows 7 Best Security and Windows 7 Good Security items provide stronger security. If you choose Windows 7 Best Security, then only TLS 1.2 will be used, and that will give your secure connections maximum protection against known attacks. If some web sites that your organization use support TLS 1.1 as their highest protocol, then the Windows 7 Good Security item enables TLS 1.1 while preferring TLS 1.2. Some web sites may support only TLS 1.0 as their strongest option, and working with such web sites requires choosing the Recommended item. The Insecure and Highly Insecure items should never be used for medium or long term production use. They are present primarily for testing and as a short-term fallback if needed. Don't use them unless if it's absolutely necessary for a short time period. While enabled, your secure connections will effectively be as secure as using no encryption at all, even if Internet Explorer is using TLS 1.0 or higher. It's possible for a downgrade attack to cause Internet Explorer or the remote server to drop down to SSL 3.0, and disabling SSL 3.0 entirely is an effective mitigation against a downgrade attack to SSL 3.0. [[File:Policies-User-IE.png|375px]] Click OK when done. After clicking OK, this group policy is ready to get picked up by users upon their next application of the user group policies. Having the users log out and back in or having the users run gpupdate.exe will cause them to pick up the change. 7040516f767daa9011078cc625a064cc2887900d 2264 2263 2014-10-18T17:55:34Z Stevenlawrance 1 /* Include in a Policy */ wikitext text/x-wiki As a way to mitigate the [https://www.openssl.org/~bodo/ssl-poodle.pdf Padding Oracle On Downgraded Legacy Encryption (POODLE) attack], information technology (IT) administrators can disable all protocols older than TLSv1 via ActiveDirectory group policies. This page describes how to do that. Using the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] with the group policy editor allows IT administrators to deploy computer-level policies that disable legacy protocols within Windows Schannel and deploy user-level policies that disable legacy protocols within Internet Explorer. Note that a computer-level disable policy for a protocol overrides Internet Explorer's configuration for that protocol. This template implements [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommended registry settings to disable SSLv3]. Please note Microsoft has a group policy setting for disabling TLS/SSL protocols in Internet Explorer, as described in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 their recommendations], but it doesn't work reliably with Internet Explorer 6 or 7. As a result, Microsoft noted in their policy template that it works only with Internet Explorer 8 and higher. If you run Internet Explorer 6 or 7, then the group policy template described on this page is a tenable option for you. The computer policies in this policy template are also useful to IT administrators whom are targeting only Internet Explorer 8 or higher. ==Installation== Save the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] as TLS-SSL-Protocols.adm within your Windows INF folder. This is typically <code>C:\Windows\INF</code>. ==Include in a Group Policy== This policy template includes two group policy targets: Computer and User. ===Computer Policies=== The Computer policies configure the Windows Schannel protocol support, which impacts client software and server software with dedicated settings for each. Internet Explorer, email software, and any program that connects to the local network or Internet and uses Windows Schannel for securing its connections are affected by the client policies. Internet Information Server, .NET server software, and any program that listens for and accepts secure connections from the local network or Internet and uses Windows Schannel for securing connections are affected by the server policies. Mozilla Firefox, Google Chrome, and Java, however, use their own software for securing connections and aren't affected by the client policies. Similarly, Java and software that uses OpenSSL (Apache, etc) or other non-Schannel software aren't affected by the server policies. To get started, either create a new group policy or edit an existing group policy that applies to groups of computers. The computer policy won't have an effect if it applies only to users and not to computers. ====Add the Policy Template==== Right-click on the Computer Configuration | Administrative Templates folder. Alternatively, right-clicking on the User Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|650px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|370px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|475px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|370px]] ====Show All Policy Settings==== By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the Computer Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-Computer.png|650px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|350px]] ====TLS/SSL Protocols==== Open the TLS/SSL Protocols folder within the Computer Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-Computer.png|650px]] If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then enable TLS 1.0 for client and server use while disabling PCT 1.0, SSL 2.0, and SSL 3.0 for client and server use. The screenshot above shows what this configuration looks like. The Group Policy Editor makes configuration convenient with the Next Setting button. Starting with the first setting, position the dialog box such that the recommendation for that setting at the top of the "Description:" line is visible. Apply that recommendation to every setting in this list, clicking Next Setting to navigate to the next setting. Click OK when done. After clicking OK, this group policy is ready to get picked up by computers upon their next application of the computer group policies to their local computer. Running gpupdate.exe on the computers that have this group policy assigned to them will cause them to pick up the change before gpupdate.exe returns. If your network is comprised entirely of Windows Server 2008 R2, Windows 7, or newer operating systems, then disabling TLS 1.0 can improve security further, though the author of this template hasn't yet tried disabling TLS 1.0 at the computer level in such a network. ===User Policy=== The User policy configures Internet Explorer and has been tested with versions 6 and higher. If you are targeting only Internet Explorer 8 or higher, it is recommended that you instead use the group policy for disabling TLS/SSL protocols as documented in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommendations for mitigating the POODLE attack]. Microsoft's built-in group policy, however, doesn't work reliably with Internet Explorer 6 and 7. To get started, either create a new group policy or edit an existing group policy that applies to groups of users. The user policy won't have an effect if it applies only to computers and not to users. ====Add the Policy Template==== Right-click on the User Configuration | Administrative Templates folder. Alternatively, right-clicking on the Computer Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|650px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|370px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|475px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|370px]] ====Show All Policy Settings==== By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the User Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-User.png|650px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|350px]] ====TLS/SSL Protocols==== Open the TLS/SSL Protocols folder within the User Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-User.png|650px]] Edit the policy setting and choose the Enabled radio button. If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then choose the Recommended item. Although those operating systems don't implement TLS 1.1 and 1.2, enabling TLS 1.1 and 1.2 is properly ignored by those older operating systems while being enabled on Windows 7, Windows Server 2008 R2, and newer operating systems. If all systems on your network run Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier, then the Windows Vista/XP option is feasible as that enables only TLS 1.0, but it's typically best to choose Recommended as that will allow upgraded systems to prefer TLS 1.1 and 1.2. If all systems on your network run Windows 7, Windows Server 2008 R2, or newer operating systems, then the Recommended setting works, but the Windows 7 Best Security and Windows 7 Good Security items provide stronger security. If you choose Windows 7 Best Security, then only TLS 1.2 will be used, and that will give your secure connections maximum protection against known attacks. If some web sites that your organization use support TLS 1.1 as their highest protocol, then the Windows 7 Good Security item enables TLS 1.1 while preferring TLS 1.2. Some web sites may support only TLS 1.0 as their strongest option, and working with such web sites requires choosing the Recommended item. The Insecure and Highly Insecure items should never be used for medium or long term production use. They are present primarily for testing and as a short-term fallback if needed. Don't use them unless if it's absolutely necessary for a short time period. While enabled, your secure connections will effectively be as secure as using no encryption at all, even if Internet Explorer is using TLS 1.0 or higher. It's possible for a downgrade attack to cause Internet Explorer or the remote server to drop down to SSL 3.0, and disabling SSL 3.0 entirely is an effective mitigation against a downgrade attack to SSL 3.0. [[File:Policies-User-IE.png|375px]] Click OK when done. After clicking OK, this group policy is ready to get picked up by users upon their next application of the user group policies. Having the users log out and back in or having the users run gpupdate.exe will cause them to pick up the change. 4892273b9ddde487e005b62c60f39635302fc223 2265 2264 2014-10-18T17:57:35Z Stevenlawrance 1 /* TLS/SSL Protocols */ wikitext text/x-wiki As a way to mitigate the [https://www.openssl.org/~bodo/ssl-poodle.pdf Padding Oracle On Downgraded Legacy Encryption (POODLE) attack], information technology (IT) administrators can disable all protocols older than TLSv1 via ActiveDirectory group policies. This page describes how to do that. Using the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] with the group policy editor allows IT administrators to deploy computer-level policies that disable legacy protocols within Windows Schannel and deploy user-level policies that disable legacy protocols within Internet Explorer. Note that a computer-level disable policy for a protocol overrides Internet Explorer's configuration for that protocol. This template implements [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommended registry settings to disable SSLv3]. Please note Microsoft has a group policy setting for disabling TLS/SSL protocols in Internet Explorer, as described in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 their recommendations], but it doesn't work reliably with Internet Explorer 6 or 7. As a result, Microsoft noted in their policy template that it works only with Internet Explorer 8 and higher. If you run Internet Explorer 6 or 7, then the group policy template described on this page is a tenable option for you. The computer policies in this policy template are also useful to IT administrators whom are targeting only Internet Explorer 8 or higher. ==Installation== Save the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] as TLS-SSL-Protocols.adm within your Windows INF folder. This is typically <code>C:\Windows\INF</code>. ==Include in a Group Policy== This policy template includes two group policy targets: Computer and User. ===Computer Policies=== The Computer policies configure the Windows Schannel protocol support, which impacts client software and server software with dedicated settings for each. Internet Explorer, email software, and any program that connects to the local network or Internet and uses Windows Schannel for securing its connections are affected by the client policies. Internet Information Server, .NET server software, and any program that listens for and accepts secure connections from the local network or Internet and uses Windows Schannel for securing connections are affected by the server policies. Mozilla Firefox, Google Chrome, and Java, however, use their own software for securing connections and aren't affected by the client policies. Similarly, Java and software that uses OpenSSL (Apache, etc) or other non-Schannel software aren't affected by the server policies. To get started, either create a new group policy or edit an existing group policy that applies to groups of computers. The computer policy won't have an effect if it applies only to users and not to computers. ====Add the Policy Template==== Right-click on the Computer Configuration | Administrative Templates folder. Alternatively, right-clicking on the User Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|650px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|370px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|475px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|370px]] ====Show All Policy Settings==== By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the Computer Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-Computer.png|650px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|350px]] ====TLS/SSL Protocols==== Open the TLS/SSL Protocols folder within the Computer Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-Computer.png|650px]] If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then enable TLS 1.0 for client and server use while disabling PCT 1.0, SSL 2.0, and SSL 3.0 for client and server use. The screenshot above shows what this configuration looks like. The Group Policy Editor makes configuration convenient with the Next Setting button. Starting with the first setting, position the dialog box such that the recommendation for that setting at the top of the "Description:" line is visible. Apply that recommendation to every setting in this list, clicking Next Setting to navigate to the next setting. Click OK when done. After clicking OK, this group policy is ready to get picked up by computers upon their next application of the computer group policies to their local computer. Running gpupdate.exe on the computers that have this group policy assigned to them will cause them to pick up the change before gpupdate.exe returns. If your network is comprised entirely of Windows Server 2008 R2, Windows 7, or newer operating systems, then disabling TLS 1.0 can improve security further, though the author of this template hasn't yet tried disabling TLS 1.0 at the computer level in such a network. ===User Policy=== The User policy configures Internet Explorer and has been tested with versions 6 and higher. If you are targeting only Internet Explorer 8 or higher, it is recommended that you instead use the group policy for disabling TLS/SSL protocols as documented in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommendations for mitigating the POODLE attack]. Microsoft's built-in group policy, however, doesn't work reliably with Internet Explorer 6 and 7. To get started, either create a new group policy or edit an existing group policy that applies to groups of users. The user policy won't have an effect if it applies only to computers and not to users. ====Add the Policy Template==== Right-click on the User Configuration | Administrative Templates folder. Alternatively, right-clicking on the Computer Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|650px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|370px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|475px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|370px]] ====Show All Policy Settings==== By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the User Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-User.png|650px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|350px]] ====TLS/SSL Protocols==== Open the TLS/SSL Protocols folder within the User Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-User.png|650px]] Edit the policy setting and choose the Enabled radio button. If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then choose the Recommended item. Although those operating systems don't implement TLS 1.1 and 1.2, enabling TLS 1.1 and 1.2 is properly ignored by those older operating systems while being enabled on Windows 7, Windows Server 2008 R2, and newer operating systems. If all systems on your network run Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier, then the Windows Vista/XP option is feasible as that enables only TLS 1.0, but it's typically best to choose Recommended as that will allow upgraded systems to prefer TLS 1.1 and 1.2. If all systems on your network run Windows 7, Windows Server 2008 R2, or newer operating systems, then the Recommended setting works, but the Windows 7 Best Security and Windows 7 Good Security items provide stronger security. If you choose Windows 7 Best Security, then only TLS 1.2 will be used, and that will give your secure connections maximum protection against known attacks. If some web sites that your organization use support TLS 1.1 as their highest protocol, then the Windows 7 Good Security item enables TLS 1.1 while preferring TLS 1.2. Some web sites may support only TLS 1.0 as their strongest option, and working with such web sites requires choosing the Recommended item. The Insecure and Highly Insecure items should never be used for medium or long term production use. They are present primarily for testing and as a short-term fallback if needed. Don't use them unless if it's absolutely necessary for a short time period. While enabled, your secure connections will effectively be as secure as using no encryption at all, even if Internet Explorer is using TLS 1.0 or higher. It's possible for a downgrade attack to cause Internet Explorer or the remote server to drop down to SSL 3.0, and disabling SSL 3.0 entirely is an effective mitigation against a downgrade attack to SSL 3.0. [[File:Policies-User-IE.png|375px]] Click OK when done. After clicking OK, this group policy is ready to get picked up by users upon their next application of the user group policies. Having the users log out and back in or having the users run gpupdate.exe will cause them to pick up the change. Please note that users can update this setting within Internet Explorer's configuration options. This policy won't overwrite their customizations unless if this policy is changed to another value or if all policies are reapplied to that user, such as with 'gpupdate /force'. 72b91c079767575ebaac3918f7312ab07230a3f5 2267 2265 2014-10-18T18:02:51Z Stevenlawrance 1 wikitext text/x-wiki As a way to mitigate the [https://www.openssl.org/~bodo/ssl-poodle.pdf Padding Oracle On Downgraded Legacy Encryption (POODLE) attack], information technology (IT) administrators can disable all protocols older than TLSv1 via ActiveDirectory group policies. This page describes how to do that. Using the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] with the group policy editor allows IT administrators to deploy computer-level policies that disable legacy protocols within Windows Schannel and deploy user-level policies that disable legacy protocols within Internet Explorer. Note that a computer-level disable policy for a protocol overrides Internet Explorer's configuration for that protocol. This template implements [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommended registry settings to disable SSLv3]. Please note that Microsoft has a group policy setting for disabling TLS/SSL protocols in Internet Explorer, as described in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 their recommendations], but it doesn't work reliably with Internet Explorer 6 or 7. As a result, Microsoft noted in their policy template that it works only with Internet Explorer 8 and higher. If you run Internet Explorer 6 or 7, then the group policy template described on this page is a tenable option for you. The computer policies in this policy template are also useful to IT administrators whom are targeting only Internet Explorer 8 or higher. ==Installation== Save the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] as TLS-SSL-Protocols.adm within your Windows INF folder. This is typically <code>C:\Windows\INF</code>. ==Include in a Group Policy== This policy template includes two group policy targets: Computer and User. ===Computer Policies=== The Computer policies configure the Windows Schannel protocol support, which impacts client software and server software with dedicated settings for each. Internet Explorer, email software, and any program that connects to the local network or Internet and uses Windows Schannel for securing its connections are affected by the client policies. Internet Information Server, .NET server software, and any program that listens for and accepts secure connections from the local network or Internet and uses Windows Schannel for securing connections are affected by the server policies. Mozilla Firefox, Google Chrome, and Java, however, use their own software for securing connections and aren't affected by the client policies. Similarly, Java and software that uses OpenSSL (Apache, etc) or other non-Schannel software aren't affected by the server policies. To get started, either create a new group policy or edit an existing group policy that applies to groups of computers. The computer policy won't have an effect if it applies only to users and not to computers. ====Add the Policy Template==== Right-click on the Computer Configuration | Administrative Templates folder. Alternatively, right-clicking on the User Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|650px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|370px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|475px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|370px]] ====Show All Policy Settings==== By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the Computer Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-Computer.png|650px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|350px]] ====TLS/SSL Protocols==== Open the TLS/SSL Protocols folder within the Computer Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-Computer.png|650px]] If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then enable TLS 1.0 for client and server use while disabling PCT 1.0, SSL 2.0, and SSL 3.0 for client and server use. The screenshot above shows what this configuration looks like. The Group Policy Editor makes configuration convenient with the Next Setting button. Starting with the first setting, position the dialog box such that the recommendation for that setting at the top of the "Description:" line is visible. Apply that recommendation to every setting in this list, clicking Next Setting to navigate to the next setting. Click OK when done. After clicking OK, this group policy is ready to get picked up by computers upon their next application of the computer group policies to their local computer. Running gpupdate.exe on the computers that have this group policy assigned to them will cause them to pick up the change before gpupdate.exe returns. If your network is comprised entirely of Windows Server 2008 R2, Windows 7, or newer operating systems, then disabling TLS 1.0 can improve security further, though the author of this template hasn't yet tried disabling TLS 1.0 at the computer level in such a network. ===User Policy=== The User policy configures Internet Explorer and has been tested with versions 6 and higher. If you are targeting only Internet Explorer 8 or higher, it is recommended that you instead use the group policy for disabling TLS/SSL protocols as documented in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommendations for mitigating the POODLE attack]. Microsoft's built-in group policy, however, doesn't work reliably with Internet Explorer 6 and 7. To get started, either create a new group policy or edit an existing group policy that applies to groups of users. The user policy won't have an effect if it applies only to computers and not to users. ====Add the Policy Template==== Right-click on the User Configuration | Administrative Templates folder. Alternatively, right-clicking on the Computer Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|650px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|370px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|475px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|370px]] ====Show All Policy Settings==== By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the User Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-User.png|650px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|350px]] ====TLS/SSL Protocols==== Open the TLS/SSL Protocols folder within the User Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-User.png|650px]] Edit the policy setting and choose the Enabled radio button. If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then choose the Recommended item. Although those operating systems don't implement TLS 1.1 and 1.2, enabling TLS 1.1 and 1.2 is properly ignored by those older operating systems while being enabled on Windows 7, Windows Server 2008 R2, and newer operating systems. If all systems on your network run Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier, then the Windows Vista/XP option is feasible as that enables only TLS 1.0, but it's typically best to choose Recommended as that will allow upgraded systems to prefer TLS 1.1 and 1.2. If all systems on your network run Windows 7, Windows Server 2008 R2, or newer operating systems, then the Recommended setting works, but the Windows 7 Best Security and Windows 7 Good Security items provide stronger security. If you choose Windows 7 Best Security, then only TLS 1.2 will be used, and that will give your secure connections maximum protection against known attacks. If some web sites that your organization use support TLS 1.1 as their highest protocol, then the Windows 7 Good Security item enables TLS 1.1 while preferring TLS 1.2. Some web sites may support only TLS 1.0 as their strongest option, and working with such web sites requires choosing the Recommended item. The Insecure and Highly Insecure items should never be used for medium or long term production use. They are present primarily for testing and as a short-term fallback if needed. Don't use them unless if it's absolutely necessary for a short time period. While enabled, your secure connections will effectively be as secure as using no encryption at all, even if Internet Explorer is using TLS 1.0 or higher. It's possible for a downgrade attack to cause Internet Explorer or the remote server to drop down to SSL 3.0, and disabling SSL 3.0 entirely is an effective mitigation against a downgrade attack to SSL 3.0. [[File:Policies-User-IE.png|375px]] Click OK when done. After clicking OK, this group policy is ready to get picked up by users upon their next application of the user group policies. Having the users log out and back in or having the users run gpupdate.exe will cause them to pick up the change. Please note that users can update this setting within Internet Explorer's configuration options. This policy won't overwrite their customizations unless if this policy is changed to another value or if all policies are reapplied to that user, such as with 'gpupdate /force'. 6a6a41c5a74ef1e030f1ba8a5da34f7c99f8c546 2268 2267 2014-10-18T18:42:00Z Stevenlawrance 1 /* TLS/SSL Protocols */ wikitext text/x-wiki As a way to mitigate the [https://www.openssl.org/~bodo/ssl-poodle.pdf Padding Oracle On Downgraded Legacy Encryption (POODLE) attack], information technology (IT) administrators can disable all protocols older than TLSv1 via ActiveDirectory group policies. This page describes how to do that. Using the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] with the group policy editor allows IT administrators to deploy computer-level policies that disable legacy protocols within Windows Schannel and deploy user-level policies that disable legacy protocols within Internet Explorer. Note that a computer-level disable policy for a protocol overrides Internet Explorer's configuration for that protocol. This template implements [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommended registry settings to disable SSLv3]. Please note that Microsoft has a group policy setting for disabling TLS/SSL protocols in Internet Explorer, as described in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 their recommendations], but it doesn't work reliably with Internet Explorer 6 or 7. As a result, Microsoft noted in their policy template that it works only with Internet Explorer 8 and higher. If you run Internet Explorer 6 or 7, then the group policy template described on this page is a tenable option for you. The computer policies in this policy template are also useful to IT administrators whom are targeting only Internet Explorer 8 or higher. ==Installation== Save the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] as TLS-SSL-Protocols.adm within your Windows INF folder. This is typically <code>C:\Windows\INF</code>. ==Include in a Group Policy== This policy template includes two group policy targets: Computer and User. ===Computer Policies=== The Computer policies configure the Windows Schannel protocol support, which impacts client software and server software with dedicated settings for each. Internet Explorer, email software, and any program that connects to the local network or Internet and uses Windows Schannel for securing its connections are affected by the client policies. Internet Information Server, .NET server software, and any program that listens for and accepts secure connections from the local network or Internet and uses Windows Schannel for securing connections are affected by the server policies. Mozilla Firefox, Google Chrome, and Java, however, use their own software for securing connections and aren't affected by the client policies. Similarly, Java and software that uses OpenSSL (Apache, etc) or other non-Schannel software aren't affected by the server policies. To get started, either create a new group policy or edit an existing group policy that applies to groups of computers. The computer policy won't have an effect if it applies only to users and not to computers. ====Add the Policy Template==== Right-click on the Computer Configuration | Administrative Templates folder. Alternatively, right-clicking on the User Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|650px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|370px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|475px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|370px]] ====Show All Policy Settings==== By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the Computer Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-Computer.png|650px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|350px]] ====TLS/SSL Protocols==== Open the TLS/SSL Protocols folder within the Computer Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-Computer.png|650px]] If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then enable TLS 1.0 for client and server use while disabling PCT 1.0, SSL 2.0, and SSL 3.0 for client and server use. The screenshot above shows what this configuration looks like. [[File:Policies-Computer-SSLv3Client.png|650px]] The Group Policy Editor makes configuration convenient with the Next Setting button. Starting with the first setting, position the dialog box such that the recommendation for that setting at the top of the "Description:" line is visible. Apply that recommendation to every setting in this list, clicking Next Setting to navigate to the next setting. Click OK when done. After clicking OK, this group policy is ready to get picked up by computers upon their next application of the computer group policies to their local computer. Running gpupdate.exe on the computers that have this group policy assigned to them will cause them to pick up the change before gpupdate.exe returns. If your network is comprised entirely of Windows Server 2008 R2, Windows 7, or newer operating systems, then disabling TLS 1.0 can improve security further, though the author of this template hasn't yet tried disabling TLS 1.0 at the computer level in such a network. ===User Policy=== The User policy configures Internet Explorer and has been tested with versions 6 and higher. If you are targeting only Internet Explorer 8 or higher, it is recommended that you instead use the group policy for disabling TLS/SSL protocols as documented in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommendations for mitigating the POODLE attack]. Microsoft's built-in group policy, however, doesn't work reliably with Internet Explorer 6 and 7. To get started, either create a new group policy or edit an existing group policy that applies to groups of users. The user policy won't have an effect if it applies only to computers and not to users. ====Add the Policy Template==== Right-click on the User Configuration | Administrative Templates folder. Alternatively, right-clicking on the Computer Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|650px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|370px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|475px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|370px]] ====Show All Policy Settings==== By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the User Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-User.png|650px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|350px]] ====TLS/SSL Protocols==== Open the TLS/SSL Protocols folder within the User Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-User.png|650px]] Edit the policy setting and choose the Enabled radio button. If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then choose the Recommended item. Although those operating systems don't implement TLS 1.1 and 1.2, enabling TLS 1.1 and 1.2 is properly ignored by those older operating systems while being enabled on Windows 7, Windows Server 2008 R2, and newer operating systems. If all systems on your network run Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier, then the Windows Vista/XP option is feasible as that enables only TLS 1.0, but it's typically best to choose Recommended as that will allow upgraded systems to prefer TLS 1.1 and 1.2. If all systems on your network run Windows 7, Windows Server 2008 R2, or newer operating systems, then the Recommended setting works, but the Windows 7 Best Security and Windows 7 Good Security items provide stronger security. If you choose Windows 7 Best Security, then only TLS 1.2 will be used, and that will give your secure connections maximum protection against known attacks. If some web sites that your organization use support TLS 1.1 as their highest protocol, then the Windows 7 Good Security item enables TLS 1.1 while preferring TLS 1.2. Some web sites may support only TLS 1.0 as their strongest option, and working with such web sites requires choosing the Recommended item. The Insecure and Highly Insecure items should never be used for medium or long term production use. They are present primarily for testing and as a short-term fallback if needed. Don't use them unless if it's absolutely necessary for a short time period. While enabled, your secure connections will effectively be as secure as using no encryption at all, even if Internet Explorer is using TLS 1.0 or higher. It's possible for a downgrade attack to cause Internet Explorer or the remote server to drop down to SSL 3.0, and disabling SSL 3.0 entirely is an effective mitigation against a downgrade attack to SSL 3.0. [[File:Policies-User-IE.png|375px]] Click OK when done. After clicking OK, this group policy is ready to get picked up by users upon their next application of the user group policies. Having the users log out and back in or having the users run gpupdate.exe will cause them to pick up the change. Please note that users can update this setting within Internet Explorer's configuration options. This policy won't overwrite their customizations unless if this policy is changed to another value or if all policies are reapplied to that user, such as with 'gpupdate /force'. 2b36c9d7bf63a95dfe96f47c28db69984edd9747 2269 2268 2014-10-18T18:42:31Z Stevenlawrance 1 /* TLS/SSL Protocols */ wikitext text/x-wiki As a way to mitigate the [https://www.openssl.org/~bodo/ssl-poodle.pdf Padding Oracle On Downgraded Legacy Encryption (POODLE) attack], information technology (IT) administrators can disable all protocols older than TLSv1 via ActiveDirectory group policies. This page describes how to do that. Using the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] with the group policy editor allows IT administrators to deploy computer-level policies that disable legacy protocols within Windows Schannel and deploy user-level policies that disable legacy protocols within Internet Explorer. Note that a computer-level disable policy for a protocol overrides Internet Explorer's configuration for that protocol. This template implements [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommended registry settings to disable SSLv3]. Please note that Microsoft has a group policy setting for disabling TLS/SSL protocols in Internet Explorer, as described in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 their recommendations], but it doesn't work reliably with Internet Explorer 6 or 7. As a result, Microsoft noted in their policy template that it works only with Internet Explorer 8 and higher. If you run Internet Explorer 6 or 7, then the group policy template described on this page is a tenable option for you. The computer policies in this policy template are also useful to IT administrators whom are targeting only Internet Explorer 8 or higher. ==Installation== Save the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] as TLS-SSL-Protocols.adm within your Windows INF folder. This is typically <code>C:\Windows\INF</code>. ==Include in a Group Policy== This policy template includes two group policy targets: Computer and User. ===Computer Policies=== The Computer policies configure the Windows Schannel protocol support, which impacts client software and server software with dedicated settings for each. Internet Explorer, email software, and any program that connects to the local network or Internet and uses Windows Schannel for securing its connections are affected by the client policies. Internet Information Server, .NET server software, and any program that listens for and accepts secure connections from the local network or Internet and uses Windows Schannel for securing connections are affected by the server policies. Mozilla Firefox, Google Chrome, and Java, however, use their own software for securing connections and aren't affected by the client policies. Similarly, Java and software that uses OpenSSL (Apache, etc) or other non-Schannel software aren't affected by the server policies. To get started, either create a new group policy or edit an existing group policy that applies to groups of computers. The computer policy won't have an effect if it applies only to users and not to computers. ====Add the Policy Template==== Right-click on the Computer Configuration | Administrative Templates folder. Alternatively, right-clicking on the User Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|650px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|370px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|475px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|370px]] ====Show All Policy Settings==== By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the Computer Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-Computer.png|650px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|350px]] ====TLS/SSL Protocols==== Open the TLS/SSL Protocols folder within the Computer Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-Computer.png|650px]] If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then enable TLS 1.0 for client and server use while disabling PCT 1.0, SSL 2.0, and SSL 3.0 for client and server use. The screenshot above shows what this configuration looks like. The Group Policy Editor makes configuration convenient with the Next Setting button. Starting with the first setting, position the dialog box such that the recommendation for that setting at the top of the "Description:" line is visible. Apply that recommendation to every setting in this list, clicking Next Setting to navigate to the next setting. Click OK when done. After clicking OK, this group policy is ready to get picked up by computers upon their next application of the computer group policies to their local computer. Running gpupdate.exe on the computers that have this group policy assigned to them will cause them to pick up the change before gpupdate.exe returns. [[File:Policies-Computer-SSLv3Client.png|650px]] If your network is comprised entirely of Windows Server 2008 R2, Windows 7, or newer operating systems, then disabling TLS 1.0 can improve security further, though the author of this template hasn't yet tried disabling TLS 1.0 at the computer level in such a network. ===User Policy=== The User policy configures Internet Explorer and has been tested with versions 6 and higher. If you are targeting only Internet Explorer 8 or higher, it is recommended that you instead use the group policy for disabling TLS/SSL protocols as documented in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommendations for mitigating the POODLE attack]. Microsoft's built-in group policy, however, doesn't work reliably with Internet Explorer 6 and 7. To get started, either create a new group policy or edit an existing group policy that applies to groups of users. The user policy won't have an effect if it applies only to computers and not to users. ====Add the Policy Template==== Right-click on the User Configuration | Administrative Templates folder. Alternatively, right-clicking on the Computer Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|650px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|370px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|475px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|370px]] ====Show All Policy Settings==== By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the User Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-User.png|650px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|350px]] ====TLS/SSL Protocols==== Open the TLS/SSL Protocols folder within the User Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-User.png|650px]] Edit the policy setting and choose the Enabled radio button. If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then choose the Recommended item. Although those operating systems don't implement TLS 1.1 and 1.2, enabling TLS 1.1 and 1.2 is properly ignored by those older operating systems while being enabled on Windows 7, Windows Server 2008 R2, and newer operating systems. If all systems on your network run Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier, then the Windows Vista/XP option is feasible as that enables only TLS 1.0, but it's typically best to choose Recommended as that will allow upgraded systems to prefer TLS 1.1 and 1.2. If all systems on your network run Windows 7, Windows Server 2008 R2, or newer operating systems, then the Recommended setting works, but the Windows 7 Best Security and Windows 7 Good Security items provide stronger security. If you choose Windows 7 Best Security, then only TLS 1.2 will be used, and that will give your secure connections maximum protection against known attacks. If some web sites that your organization use support TLS 1.1 as their highest protocol, then the Windows 7 Good Security item enables TLS 1.1 while preferring TLS 1.2. Some web sites may support only TLS 1.0 as their strongest option, and working with such web sites requires choosing the Recommended item. The Insecure and Highly Insecure items should never be used for medium or long term production use. They are present primarily for testing and as a short-term fallback if needed. Don't use them unless if it's absolutely necessary for a short time period. While enabled, your secure connections will effectively be as secure as using no encryption at all, even if Internet Explorer is using TLS 1.0 or higher. It's possible for a downgrade attack to cause Internet Explorer or the remote server to drop down to SSL 3.0, and disabling SSL 3.0 entirely is an effective mitigation against a downgrade attack to SSL 3.0. [[File:Policies-User-IE.png|375px]] Click OK when done. After clicking OK, this group policy is ready to get picked up by users upon their next application of the user group policies. Having the users log out and back in or having the users run gpupdate.exe will cause them to pick up the change. Please note that users can update this setting within Internet Explorer's configuration options. This policy won't overwrite their customizations unless if this policy is changed to another value or if all policies are reapplied to that user, such as with 'gpupdate /force'. 99f2a04f340418560b99b68ca7aab7b61bcda796 2270 2269 2014-10-18T18:42:57Z Stevenlawrance 1 /* TLS/SSL Protocols */ wikitext text/x-wiki As a way to mitigate the [https://www.openssl.org/~bodo/ssl-poodle.pdf Padding Oracle On Downgraded Legacy Encryption (POODLE) attack], information technology (IT) administrators can disable all protocols older than TLSv1 via ActiveDirectory group policies. This page describes how to do that. Using the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] with the group policy editor allows IT administrators to deploy computer-level policies that disable legacy protocols within Windows Schannel and deploy user-level policies that disable legacy protocols within Internet Explorer. Note that a computer-level disable policy for a protocol overrides Internet Explorer's configuration for that protocol. This template implements [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommended registry settings to disable SSLv3]. Please note that Microsoft has a group policy setting for disabling TLS/SSL protocols in Internet Explorer, as described in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 their recommendations], but it doesn't work reliably with Internet Explorer 6 or 7. As a result, Microsoft noted in their policy template that it works only with Internet Explorer 8 and higher. If you run Internet Explorer 6 or 7, then the group policy template described on this page is a tenable option for you. The computer policies in this policy template are also useful to IT administrators whom are targeting only Internet Explorer 8 or higher. ==Installation== Save the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] as TLS-SSL-Protocols.adm within your Windows INF folder. This is typically <code>C:\Windows\INF</code>. ==Include in a Group Policy== This policy template includes two group policy targets: Computer and User. ===Computer Policies=== The Computer policies configure the Windows Schannel protocol support, which impacts client software and server software with dedicated settings for each. Internet Explorer, email software, and any program that connects to the local network or Internet and uses Windows Schannel for securing its connections are affected by the client policies. Internet Information Server, .NET server software, and any program that listens for and accepts secure connections from the local network or Internet and uses Windows Schannel for securing connections are affected by the server policies. Mozilla Firefox, Google Chrome, and Java, however, use their own software for securing connections and aren't affected by the client policies. Similarly, Java and software that uses OpenSSL (Apache, etc) or other non-Schannel software aren't affected by the server policies. To get started, either create a new group policy or edit an existing group policy that applies to groups of computers. The computer policy won't have an effect if it applies only to users and not to computers. ====Add the Policy Template==== Right-click on the Computer Configuration | Administrative Templates folder. Alternatively, right-clicking on the User Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|650px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|370px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|475px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|370px]] ====Show All Policy Settings==== By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the Computer Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-Computer.png|650px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|350px]] ====TLS/SSL Protocols==== Open the TLS/SSL Protocols folder within the Computer Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-Computer.png|650px]] If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then enable TLS 1.0 for client and server use while disabling PCT 1.0, SSL 2.0, and SSL 3.0 for client and server use. The screenshot above shows what this configuration looks like. The Group Policy Editor makes configuration convenient with the Next Setting button, as shown in the screenshot below. Starting with the first setting, position the dialog box such that the recommendation for that setting at the top of the "Description:" line is visible. Apply that recommendation to every setting in this list, clicking Next Setting to navigate to the next setting. Click OK when done. After clicking OK, this group policy is ready to get picked up by computers upon their next application of the computer group policies to their local computer. Running gpupdate.exe on the computers that have this group policy assigned to them will cause them to pick up the change before gpupdate.exe returns. [[File:Policies-Computer-SSLv3Client.png|650px]] If your network is comprised entirely of Windows Server 2008 R2, Windows 7, or newer operating systems, then disabling TLS 1.0 can improve security further, though the author of this template hasn't yet tried disabling TLS 1.0 at the computer level in such a network. ===User Policy=== The User policy configures Internet Explorer and has been tested with versions 6 and higher. If you are targeting only Internet Explorer 8 or higher, it is recommended that you instead use the group policy for disabling TLS/SSL protocols as documented in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommendations for mitigating the POODLE attack]. Microsoft's built-in group policy, however, doesn't work reliably with Internet Explorer 6 and 7. To get started, either create a new group policy or edit an existing group policy that applies to groups of users. The user policy won't have an effect if it applies only to computers and not to users. ====Add the Policy Template==== Right-click on the User Configuration | Administrative Templates folder. Alternatively, right-clicking on the Computer Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|650px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|370px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|475px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|370px]] ====Show All Policy Settings==== By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the User Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-User.png|650px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|350px]] ====TLS/SSL Protocols==== Open the TLS/SSL Protocols folder within the User Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-User.png|650px]] Edit the policy setting and choose the Enabled radio button. If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then choose the Recommended item. Although those operating systems don't implement TLS 1.1 and 1.2, enabling TLS 1.1 and 1.2 is properly ignored by those older operating systems while being enabled on Windows 7, Windows Server 2008 R2, and newer operating systems. If all systems on your network run Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier, then the Windows Vista/XP option is feasible as that enables only TLS 1.0, but it's typically best to choose Recommended as that will allow upgraded systems to prefer TLS 1.1 and 1.2. If all systems on your network run Windows 7, Windows Server 2008 R2, or newer operating systems, then the Recommended setting works, but the Windows 7 Best Security and Windows 7 Good Security items provide stronger security. If you choose Windows 7 Best Security, then only TLS 1.2 will be used, and that will give your secure connections maximum protection against known attacks. If some web sites that your organization use support TLS 1.1 as their highest protocol, then the Windows 7 Good Security item enables TLS 1.1 while preferring TLS 1.2. Some web sites may support only TLS 1.0 as their strongest option, and working with such web sites requires choosing the Recommended item. The Insecure and Highly Insecure items should never be used for medium or long term production use. They are present primarily for testing and as a short-term fallback if needed. Don't use them unless if it's absolutely necessary for a short time period. While enabled, your secure connections will effectively be as secure as using no encryption at all, even if Internet Explorer is using TLS 1.0 or higher. It's possible for a downgrade attack to cause Internet Explorer or the remote server to drop down to SSL 3.0, and disabling SSL 3.0 entirely is an effective mitigation against a downgrade attack to SSL 3.0. [[File:Policies-User-IE.png|375px]] Click OK when done. After clicking OK, this group policy is ready to get picked up by users upon their next application of the user group policies. Having the users log out and back in or having the users run gpupdate.exe will cause them to pick up the change. Please note that users can update this setting within Internet Explorer's configuration options. This policy won't overwrite their customizations unless if this policy is changed to another value or if all policies are reapplied to that user, such as with 'gpupdate /force'. 2ce11c5e7de0b23fe952273044ef7c7b0b8cc224 2271 2270 2014-10-18T22:03:23Z Stevenlawrance 1 wikitext text/x-wiki As a way to mitigate the [https://www.openssl.org/~bodo/ssl-poodle.pdf Padding Oracle On Downgraded Legacy Encryption (POODLE) attack], information technology (IT) administrators can disable all protocols older than TLSv1 via ActiveDirectory group policies. This page describes how to do that. Using the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] with the group policy editor allows IT administrators to deploy computer-level policies that disable legacy protocols within Windows Schannel and deploy user-level policies that disable legacy protocols within Internet Explorer. Note that a computer-level disable policy for a protocol overrides Internet Explorer's configuration for that protocol. This template implements [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommended registry settings to disable SSLv3]. Please note that Microsoft has a group policy setting for disabling TLS/SSL protocols in Internet Explorer, as described in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 their recommendations], but it doesn't work reliably with Internet Explorer 6 or 7. As a result, Microsoft noted in their policy template that it works only with Internet Explorer 8 and higher. If you run Internet Explorer 6 or 7, then the group policy template described on this page is a tenable option for you. The computer policies in this policy template are also useful to IT administrators whom are targeting only Internet Explorer 8 or higher. To handle systems that are not covered by group policies, this page includes registry merge files. ==Include in a Group Policy== To use the group policies, you'll need to install the policy template file. The policy template includes two group policy targets for configuration: Computer and User. ===Installation=== Save the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] as TLS-SSL-Protocols.adm within your Windows INF folder. This is typically <code>C:\Windows\INF</code>. ===Computer Policies=== The Computer policies configure the Windows Schannel protocol support, which impacts client software and server software with dedicated settings for each. Internet Explorer, email software, and any program that connects to the local network or Internet and uses Windows Schannel for securing its connections are affected by the client policies. Internet Information Server, .NET server software, and any program that listens for and accepts secure connections from the local network or Internet and uses Windows Schannel for securing connections are affected by the server policies. Mozilla Firefox, Google Chrome, and Java, however, use their own software for securing connections and aren't affected by the client policies. Similarly, Java and software that uses OpenSSL (Apache, etc) or other non-Schannel software aren't affected by the server policies. To get started, either create a new group policy or edit an existing group policy that applies to groups of computers. The computer policy won't have an effect if it applies only to users and not to computers. ====Add the Policy Template==== Right-click on the Computer Configuration | Administrative Templates folder. Alternatively, right-clicking on the User Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|650px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|370px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|475px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|370px]] ====Show All Policy Settings==== By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the Computer Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-Computer.png|650px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|350px]] ====TLS/SSL Protocols==== Open the TLS/SSL Protocols folder within the Computer Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-Computer.png|650px]] If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then enable TLS 1.0 for client and server use while disabling PCT 1.0, SSL 2.0, and SSL 3.0 for client and server use. The screenshot above shows what this configuration looks like. The Group Policy Editor makes configuration convenient with the Next Setting button, as shown in the screenshot below. Starting with the first setting, position the dialog box such that the recommendation for that setting at the top of the "Description:" line is visible. Apply that recommendation to every setting in this list, clicking Next Setting to navigate to the next setting. Click OK when done. After clicking OK, this group policy is ready to get picked up by computers upon their next application of the computer group policies to their local computer. Running gpupdate.exe on the computers that have this group policy assigned to them will cause them to pick up the change before gpupdate.exe returns. [[File:Policies-Computer-SSLv3Client.png|650px]] If your network is comprised entirely of Windows Server 2008 R2, Windows 7, or newer operating systems, then disabling TLS 1.0 can improve security further, though the author of this template hasn't yet tried disabling TLS 1.0 at the computer level in such a network. ===User Policy=== The User policy configures Internet Explorer and has been tested with versions 6 and higher. If you are targeting only Internet Explorer 8 or higher, it is recommended that you instead use the group policy for disabling TLS/SSL protocols as documented in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommendations for mitigating the POODLE attack]. Microsoft's built-in group policy, however, doesn't work reliably with Internet Explorer 6 and 7. To get started, either create a new group policy or edit an existing group policy that applies to groups of users. The user policy won't have an effect if it applies only to computers and not to users. ====Add the Policy Template==== Right-click on the User Configuration | Administrative Templates folder. Alternatively, right-clicking on the Computer Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|650px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|370px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|475px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|370px]] ====Show All Policy Settings==== By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the User Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-User.png|650px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|350px]] ====TLS/SSL Protocols==== Open the TLS/SSL Protocols folder within the User Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-User.png|650px]] Edit the policy setting and choose the Enabled radio button. If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then choose the Recommended item. Although those operating systems don't implement TLS 1.1 and 1.2, enabling TLS 1.1 and 1.2 is properly ignored by those older operating systems while being enabled on Windows 7, Windows Server 2008 R2, and newer operating systems. If all systems on your network run Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier, then the Windows Vista/XP option is feasible as that enables only TLS 1.0, but it's typically best to choose Recommended as that will allow upgraded systems to prefer TLS 1.1 and 1.2. If all systems on your network run Windows 7, Windows Server 2008 R2, or newer operating systems, then the Recommended setting works, but the Windows 7 Best Security and Windows 7 Good Security items provide stronger security. If you choose Windows 7 Best Security, then only TLS 1.2 will be used, and that will give your secure connections maximum protection against known attacks. If some web sites that your organization use support TLS 1.1 as their highest protocol, then the Windows 7 Good Security item enables TLS 1.1 while preferring TLS 1.2. Some web sites may support only TLS 1.0 as their strongest option, and working with such web sites requires choosing the Recommended item. The Insecure and Highly Insecure items should never be used for medium or long term production use. They are present primarily for testing and as a short-term fallback if needed. Don't use them unless if it's absolutely necessary for a short time period. While enabled, your secure connections will effectively be as secure as using no encryption at all, even if Internet Explorer is using TLS 1.0 or higher. It's possible for a downgrade attack to cause Internet Explorer or the remote server to drop down to SSL 3.0, and disabling SSL 3.0 entirely is an effective mitigation against a downgrade attack to SSL 3.0. [[File:Policies-User-IE.png|375px]] Click OK when done. After clicking OK, this group policy is ready to get picked up by users upon their next application of the user group policies. Having the users log out and back in or having the users run gpupdate.exe will cause them to pick up the change. Please note that users can update this setting within Internet Explorer's configuration options. This policy won't overwrite their customizations unless if this policy is changed to another value or if all policies are reapplied to that user, such as with 'gpupdate /force'. ==Configure Without Group Policies== To quickly configure a computer that doesn't have group policies, it is possible to use a registry merge file. The following files implement their stated configuration scenarios: *Recommended: TLS 1.2, 1.1, and 1.0 **Compatible with all versions of Windows that implement TLS 1.0, including those that don't implement TLS 1.1 and 1.2. *Windows 7 Best Security: TLS 1.2 only *Windows 7 Good Security: TLS 1.2 and 1.1 *Windows Vista/XP: TLS 1.0 Only *Insecure: SSL 3.0 and TLS 1.0 *Highly Insecure: SSL 3.0 only 5cb8479fccaa09ec31e4bf7d43005061a632efa9 2272 2271 2014-10-18T22:03:48Z Stevenlawrance 1 wikitext text/x-wiki As a way to mitigate the [https://www.openssl.org/~bodo/ssl-poodle.pdf Padding Oracle On Downgraded Legacy Encryption (POODLE) attack], information technology (IT) administrators can disable all protocols older than TLSv1 via ActiveDirectory group policies. This page describes how to do that. Using the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] with the group policy editor allows IT administrators to deploy computer-level policies that disable legacy protocols within Windows Schannel and deploy user-level policies that disable legacy protocols within Internet Explorer. Note that a computer-level disable policy for a protocol overrides Internet Explorer's configuration for that protocol. This template implements [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommended registry settings to disable SSLv3]. Please note that Microsoft has a group policy setting for disabling TLS/SSL protocols in Internet Explorer, as described in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 their recommendations], but it doesn't work reliably with Internet Explorer 6 or 7. As a result, Microsoft noted in their policy template that it works only with Internet Explorer 8 and higher. If you run Internet Explorer 6 or 7, then the group policy template described on this page is a tenable option for you. The computer policies in this policy template are also useful to IT administrators whom are targeting only Internet Explorer 8 or higher. To handle systems that are not covered by group policies, this page includes registry merge files. ==Configure With Group Policies== To use the group policies, you'll need to install the policy template file. The policy template includes two group policy targets for configuration: Computer and User. ===Installation=== Save the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] as TLS-SSL-Protocols.adm within your Windows INF folder. This is typically <code>C:\Windows\INF</code>. ===Computer Policies=== The Computer policies configure the Windows Schannel protocol support, which impacts client software and server software with dedicated settings for each. Internet Explorer, email software, and any program that connects to the local network or Internet and uses Windows Schannel for securing its connections are affected by the client policies. Internet Information Server, .NET server software, and any program that listens for and accepts secure connections from the local network or Internet and uses Windows Schannel for securing connections are affected by the server policies. Mozilla Firefox, Google Chrome, and Java, however, use their own software for securing connections and aren't affected by the client policies. Similarly, Java and software that uses OpenSSL (Apache, etc) or other non-Schannel software aren't affected by the server policies. To get started, either create a new group policy or edit an existing group policy that applies to groups of computers. The computer policy won't have an effect if it applies only to users and not to computers. ====Add the Policy Template==== Right-click on the Computer Configuration | Administrative Templates folder. Alternatively, right-clicking on the User Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|650px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|370px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|475px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|370px]] ====Show All Policy Settings==== By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the Computer Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-Computer.png|650px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|350px]] ====TLS/SSL Protocols==== Open the TLS/SSL Protocols folder within the Computer Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-Computer.png|650px]] If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then enable TLS 1.0 for client and server use while disabling PCT 1.0, SSL 2.0, and SSL 3.0 for client and server use. The screenshot above shows what this configuration looks like. The Group Policy Editor makes configuration convenient with the Next Setting button, as shown in the screenshot below. Starting with the first setting, position the dialog box such that the recommendation for that setting at the top of the "Description:" line is visible. Apply that recommendation to every setting in this list, clicking Next Setting to navigate to the next setting. Click OK when done. After clicking OK, this group policy is ready to get picked up by computers upon their next application of the computer group policies to their local computer. Running gpupdate.exe on the computers that have this group policy assigned to them will cause them to pick up the change before gpupdate.exe returns. [[File:Policies-Computer-SSLv3Client.png|650px]] If your network is comprised entirely of Windows Server 2008 R2, Windows 7, or newer operating systems, then disabling TLS 1.0 can improve security further, though the author of this template hasn't yet tried disabling TLS 1.0 at the computer level in such a network. ===User Policy=== The User policy configures Internet Explorer and has been tested with versions 6 and higher. If you are targeting only Internet Explorer 8 or higher, it is recommended that you instead use the group policy for disabling TLS/SSL protocols as documented in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommendations for mitigating the POODLE attack]. Microsoft's built-in group policy, however, doesn't work reliably with Internet Explorer 6 and 7. To get started, either create a new group policy or edit an existing group policy that applies to groups of users. The user policy won't have an effect if it applies only to computers and not to users. ====Add the Policy Template==== Right-click on the User Configuration | Administrative Templates folder. Alternatively, right-clicking on the Computer Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|650px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|370px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|475px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|370px]] ====Show All Policy Settings==== By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the User Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-User.png|650px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|350px]] ====TLS/SSL Protocols==== Open the TLS/SSL Protocols folder within the User Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-User.png|650px]] Edit the policy setting and choose the Enabled radio button. If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then choose the Recommended item. Although those operating systems don't implement TLS 1.1 and 1.2, enabling TLS 1.1 and 1.2 is properly ignored by those older operating systems while being enabled on Windows 7, Windows Server 2008 R2, and newer operating systems. If all systems on your network run Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier, then the Windows Vista/XP option is feasible as that enables only TLS 1.0, but it's typically best to choose Recommended as that will allow upgraded systems to prefer TLS 1.1 and 1.2. If all systems on your network run Windows 7, Windows Server 2008 R2, or newer operating systems, then the Recommended setting works, but the Windows 7 Best Security and Windows 7 Good Security items provide stronger security. If you choose Windows 7 Best Security, then only TLS 1.2 will be used, and that will give your secure connections maximum protection against known attacks. If some web sites that your organization use support TLS 1.1 as their highest protocol, then the Windows 7 Good Security item enables TLS 1.1 while preferring TLS 1.2. Some web sites may support only TLS 1.0 as their strongest option, and working with such web sites requires choosing the Recommended item. The Insecure and Highly Insecure items should never be used for medium or long term production use. They are present primarily for testing and as a short-term fallback if needed. Don't use them unless if it's absolutely necessary for a short time period. While enabled, your secure connections will effectively be as secure as using no encryption at all, even if Internet Explorer is using TLS 1.0 or higher. It's possible for a downgrade attack to cause Internet Explorer or the remote server to drop down to SSL 3.0, and disabling SSL 3.0 entirely is an effective mitigation against a downgrade attack to SSL 3.0. [[File:Policies-User-IE.png|375px]] Click OK when done. After clicking OK, this group policy is ready to get picked up by users upon their next application of the user group policies. Having the users log out and back in or having the users run gpupdate.exe will cause them to pick up the change. Please note that users can update this setting within Internet Explorer's configuration options. This policy won't overwrite their customizations unless if this policy is changed to another value or if all policies are reapplied to that user, such as with 'gpupdate /force'. ==Configure Without Group Policies== To quickly configure a computer that doesn't have group policies, it is possible to use a registry merge file. The following files implement their stated configuration scenarios: *Recommended: TLS 1.2, 1.1, and 1.0 **Compatible with all versions of Windows that implement TLS 1.0, including those that don't implement TLS 1.1 and 1.2. *Windows 7 Best Security: TLS 1.2 only *Windows 7 Good Security: TLS 1.2 and 1.1 *Windows Vista/XP: TLS 1.0 Only *Insecure: SSL 3.0 and TLS 1.0 *Highly Insecure: SSL 3.0 only b048b730ef675f8660047200f340c02791c2e961 2273 2272 2014-10-18T22:15:02Z Stevenlawrance 1 wikitext text/x-wiki As a way to mitigate the [https://www.openssl.org/~bodo/ssl-poodle.pdf Padding Oracle On Downgraded Legacy Encryption (POODLE) attack], information technology (IT) administrators can disable all protocols older than TLSv1 via ActiveDirectory group policies. This page describes how to do that. Using the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] with the group policy editor allows IT administrators to deploy computer-level policies that disable legacy protocols within Windows Schannel and deploy user-level policies that disable legacy protocols within Internet Explorer. Note that a computer-level disable policy for a protocol overrides Internet Explorer's configuration for that protocol. This template implements [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommended registry settings to disable SSLv3]. Please note that Microsoft has a group policy setting for disabling TLS/SSL protocols in Internet Explorer, as described in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 their recommendations], but it doesn't work reliably with Internet Explorer 6 or 7. As a result, Microsoft noted in their policy template that it works only with Internet Explorer 8 and higher. If you run Internet Explorer 6 or 7, then the group policy template described on this page is a tenable option for you. The computer policies in this policy template are also useful to IT administrators whom are targeting only Internet Explorer 8 or higher. To handle systems that are not covered by group policies, this page also includes registry merge files for convenience. ==Configure With Group Policies== To use the group policies, you'll need to install the policy template file. The policy template includes two group policy targets for configuration: Computer and User. ===Installation=== Save the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] as TLS-SSL-Protocols.adm within your Windows INF folder. This is typically <code>C:\Windows\INF</code>. ===Computer Policies=== The Computer policies configure the Windows Schannel protocol support, which impacts client software and server software with dedicated settings for each. Internet Explorer, email software, and any program that connects to the local network or Internet and uses Windows Schannel for securing its connections are affected by the client policies. Internet Information Server, .NET server software, and any program that listens for and accepts secure connections from the local network or Internet and uses Windows Schannel for securing connections are affected by the server policies. Mozilla Firefox, Google Chrome, and Java, however, use their own software for securing connections and aren't affected by the client policies. Similarly, Java and software that uses OpenSSL (Apache, etc) or other non-Schannel software aren't affected by the server policies. To get started, either create a new group policy or edit an existing group policy that applies to groups of computers. The computer policy won't have an effect if it applies only to users and not to computers. ====Add the Policy Template==== Right-click on the Computer Configuration | Administrative Templates folder. Alternatively, right-clicking on the User Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|650px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|370px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|475px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|370px]] ====Show All Policy Settings==== By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the Computer Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-Computer.png|650px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|350px]] ====TLS/SSL Protocols==== Open the TLS/SSL Protocols folder within the Computer Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-Computer.png|650px]] If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then enable TLS 1.0 for client and server use while disabling PCT 1.0, SSL 2.0, and SSL 3.0 for client and server use. The screenshot above shows what this configuration looks like. The Group Policy Editor makes configuration convenient with the Next Setting button, as shown in the screenshot below. Starting with the first setting, position the dialog box such that the recommendation for that setting at the top of the "Description:" line is visible. Apply that recommendation to every setting in this list, clicking Next Setting to navigate to the next setting. Click OK when done. After clicking OK, this group policy is ready to get picked up by computers upon their next application of the computer group policies to their local computer. Running gpupdate.exe on the computers that have this group policy assigned to them will cause them to pick up the change before gpupdate.exe returns. [[File:Policies-Computer-SSLv3Client.png|650px]] If your network is comprised entirely of Windows Server 2008 R2, Windows 7, or newer operating systems, then disabling TLS 1.0 can improve security further, though the author of this template hasn't yet tried disabling TLS 1.0 at the computer level in such a network. ===User Policy=== The User policy configures Internet Explorer and has been tested with versions 6 and higher. If you are targeting only Internet Explorer 8 or higher, it is recommended that you instead use the group policy for disabling TLS/SSL protocols as documented in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommendations for mitigating the POODLE attack]. Microsoft's built-in group policy, however, doesn't work reliably with Internet Explorer 6 and 7. To get started, either create a new group policy or edit an existing group policy that applies to groups of users. The user policy won't have an effect if it applies only to computers and not to users. ====Add the Policy Template==== Right-click on the User Configuration | Administrative Templates folder. Alternatively, right-clicking on the Computer Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|650px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|370px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|475px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|370px]] ====Show All Policy Settings==== By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the User Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-User.png|650px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|350px]] ====TLS/SSL Protocols==== Open the TLS/SSL Protocols folder within the User Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-User.png|650px]] Edit the policy setting and choose the Enabled radio button. If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then choose the Recommended item. Although those operating systems don't implement TLS 1.1 and 1.2, enabling TLS 1.1 and 1.2 is properly ignored by those older operating systems while being enabled on Windows 7, Windows Server 2008 R2, and newer operating systems. If all systems on your network run Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier, then the Windows Vista/XP option is feasible as that enables only TLS 1.0, but it's typically best to choose Recommended as that will allow upgraded systems to prefer TLS 1.1 and 1.2. If all systems on your network run Windows 7, Windows Server 2008 R2, or newer operating systems, then the Recommended setting works, but the Windows 7 Best Security and Windows 7 Good Security items provide stronger security. If you choose Windows 7 Best Security, then only TLS 1.2 will be used, and that will give your secure connections maximum protection against known attacks. If some web sites that your organization use support TLS 1.1 as their highest protocol, then the Windows 7 Good Security item enables TLS 1.1 while preferring TLS 1.2. Some web sites may support only TLS 1.0 as their strongest option, and working with such web sites requires choosing the Recommended item. The Insecure and Highly Insecure items should never be used for medium or long term production use. They are present primarily for testing and as a short-term fallback if needed. Don't use them unless if it's absolutely necessary for a short time period. While enabled, your secure connections will effectively be as secure as using no encryption at all, even if Internet Explorer is using TLS 1.0 or higher. It's possible for a downgrade attack to cause Internet Explorer or the remote server to drop down to SSL 3.0, and disabling SSL 3.0 entirely is an effective mitigation against a downgrade attack to SSL 3.0. [[File:Policies-User-IE.png|375px]] Click OK when done. After clicking OK, this group policy is ready to get picked up by users upon their next application of the user group policies. Having the users log out and back in or having the users run gpupdate.exe will cause them to pick up the change. Please note that users can update this setting within Internet Explorer's configuration options. This policy won't overwrite their customizations unless if this policy is changed to another value or if all policies are reapplied to that user, such as with 'gpupdate /force'. ==Configure Without Group Policies== To quickly configure a computer that doesn't have group policies, it is possible to use a registry merge file. The following files implement their stated configuration scenarios: *[https://www.moonlightdesign.org/dl/TLS-SSL-Recommended.reg Recommended: TLS 1.2, 1.1, and 1.0] **Compatible with all versions of Windows that implement TLS 1.0, including those that don't implement TLS 1.1 and 1.2. *[https://www.moonlightdesign.org/dl/TLS-SSL-Windows-7-Best.reg Windows 7 Best Security: TLS 1.2 only] *[https://www.moonlightdesign.org/dl/TLS-SSL-Windows-7-Good.reg Windows 7 Good Security: TLS 1.2 and 1.1] *[https://www.moonlightdesign.org/dl/TLS-SSL-Windows-Vista-XP.reg Windows Vista/XP: TLS 1.0 Only] *[https://www.moonlightdesign.org/dl/TLS-SSL-Insecure.reg Insecure: SSL 3.0 and TLS 1.0] *[https://www.moonlightdesign.org/dl/TLS-SSL-Highly-Insecure.reg Highly Insecure: SSL 3.0 only] 088de4e7e3669f226b5cda8ef311f3533b005552 2274 2273 2014-10-18T22:23:17Z Stevenlawrance 1 wikitext text/x-wiki As a way to mitigate the [https://www.openssl.org/~bodo/ssl-poodle.pdf Padding Oracle On Downgraded Legacy Encryption (POODLE) attack], information technology (IT) administrators can disable all protocols older than TLSv1 via ActiveDirectory group policies. This page describes how to do that. Using the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] with the group policy editor allows IT administrators to deploy computer-level policies that disable legacy protocols within Windows Schannel and deploy user-level policies that disable legacy protocols within Internet Explorer. Note that a computer-level disable policy for a protocol overrides Internet Explorer's configuration for that protocol. This template implements [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommended registry settings to disable SSLv3]. Please note that Microsoft has a group policy setting for disabling TLS/SSL protocols in Internet Explorer, as described in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 their recommendations], but it doesn't work reliably with Internet Explorer 6 or 7. As a result, Microsoft noted in their policy template that it works only with Internet Explorer 8 and higher. If you run Internet Explorer 6 or 7, then the group policy template described on this page is a tenable option for you. The computer policies in this policy template are also useful to IT administrators whom are targeting only Internet Explorer 8 or higher. To handle systems that are not covered by group policies, this page also includes registry merge files for convenience. ==Configure With Group Policies== To use the group policies, you'll need to install the policy template file. The policy template includes two group policy targets for configuration: Computer and User. ===Installation=== Save the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] as TLS-SSL-Protocols.adm within your Windows INF folder. This is typically <code>C:\Windows\INF</code>. ===Computer Policies=== The Computer policies configure the Windows Schannel protocol support, which impacts client software and server software with dedicated settings for each. Internet Explorer, email software, and any program that connects to the local network or Internet and uses Windows Schannel for securing its connections are affected by the client policies. Internet Information Server, .NET server software, and any program that listens for and accepts secure connections from the local network or Internet and uses Windows Schannel for securing connections are affected by the server policies. Mozilla Firefox, Google Chrome, and Java, however, use their own software for securing connections and aren't affected by the client policies. Similarly, Java and software that uses OpenSSL (Apache, etc) or other non-Schannel software aren't affected by the server policies. To get started, either create a new group policy or edit an existing group policy that applies to groups of computers. The computer policy won't have an effect if it applies only to users and not to computers. ====Add the Policy Template==== Right-click on the Computer Configuration | Administrative Templates folder. Alternatively, right-clicking on the User Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|650px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|370px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|475px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|370px]] ====Show All Policy Settings==== By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the Computer Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-Computer.png|650px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|350px]] ====TLS/SSL Protocols==== Open the TLS/SSL Protocols folder within the Computer Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-Computer.png|650px]] If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then enable TLS 1.0 for client and server use while disabling PCT 1.0, SSL 2.0, and SSL 3.0 for client and server use. The screenshot above shows what this configuration looks like. The Group Policy Editor makes configuration convenient with the Next Setting button, as shown in the screenshot below. Starting with the first setting, position the dialog box such that the recommendation for that setting at the top of the "Description:" line is visible. Apply that recommendation to every setting in this list, clicking Next Setting to navigate to the next setting. Click OK when done. After clicking OK, this group policy is ready to get picked up by computers upon their next application of the computer group policies to their local computer. Running gpupdate.exe on the computers that have this group policy assigned to them will cause them to pick up the change before gpupdate.exe returns. [[File:Policies-Computer-SSLv3Client.png|650px]] If your network is comprised entirely of Windows Server 2008 R2, Windows 7, or newer operating systems, then disabling TLS 1.0 can improve security further, though the author of this template hasn't yet tried disabling TLS 1.0 at the computer level in such a network. ===User Policy=== The User policy configures Internet Explorer and has been tested with versions 6 and higher. If you are targeting only Internet Explorer 8 or higher, it is recommended that you instead use the group policy for disabling TLS/SSL protocols as documented in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommendations for mitigating the POODLE attack]. Microsoft's built-in group policy, however, doesn't work reliably with Internet Explorer 6 and 7. To get started, either create a new group policy or edit an existing group policy that applies to groups of users. The user policy won't have an effect if it applies only to computers and not to users. ====Add the Policy Template==== Right-click on the User Configuration | Administrative Templates folder. Alternatively, right-clicking on the Computer Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|650px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|370px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|475px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|370px]] ====Show All Policy Settings==== By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the User Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-User.png|650px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|350px]] ====TLS/SSL Protocols==== Open the TLS/SSL Protocols folder within the User Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-User.png|650px]] Edit the policy setting and choose the Enabled radio button. If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then choose the Recommended item. Although those operating systems don't implement TLS 1.1 and 1.2, enabling TLS 1.1 and 1.2 is properly ignored by those older operating systems while being enabled on Windows 7, Windows Server 2008 R2, and newer operating systems. If all systems on your network run Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier, then the Windows Vista/XP option is feasible as that enables only TLS 1.0, but it's typically best to choose Recommended as that will allow upgraded systems to prefer TLS 1.1 and 1.2. If all systems on your network run Windows 7, Windows Server 2008 R2, or newer operating systems, then the Recommended setting works, but the Windows 7 Best Security and Windows 7 Good Security items provide stronger security. If you choose Windows 7 Best Security, then only TLS 1.2 will be used, and that will give your secure connections maximum protection against known attacks. If some web sites that your organization use support TLS 1.1 as their highest protocol, then the Windows 7 Good Security item enables TLS 1.1 while preferring TLS 1.2. Some web sites may support only TLS 1.0 as their strongest option, and working with such web sites requires choosing the Recommended item. The Insecure and Highly Insecure items should never be used for medium or long term production use. They are present primarily for testing and as a short-term fallback if needed. Don't use them unless if it's absolutely necessary for a short time period. While enabled, your secure connections will effectively be as secure as using no encryption at all, even if Internet Explorer is using TLS 1.0 or higher. It's possible for a downgrade attack to cause Internet Explorer or the remote server to drop down to SSL 3.0, and disabling SSL 3.0 entirely is an effective mitigation against a downgrade attack to SSL 3.0. [[File:Policies-User-IE.png|375px]] Click OK when done. After clicking OK, this group policy is ready to get picked up by users upon their next application of the user group policies. Having the users log out and back in or having the users run gpupdate.exe will cause them to pick up the change. Please note that users can update this setting within Internet Explorer's configuration options. This policy won't overwrite their customizations unless if this policy is changed to another value or if all policies are reapplied to that user, such as with 'gpupdate /force'. ==Configure Without Group Policies== To quickly configure a computer that doesn't have group policies, it is possible to use a registry merge file. The following files implement their stated configuration scenarios: *[https://www.moonlightdesign.org/dl/TLS-SSL-Recommended.reg Recommended: TLS 1.2, 1.1, and 1.0] **Compatible with all versions of Windows that implement TLS 1.0, including those that don't implement TLS 1.1 and 1.2. *[https://www.moonlightdesign.org/dl/TLS-SSL-Windows-7-Best.reg Windows 7 Best Security: TLS 1.2 only] *[https://www.moonlightdesign.org/dl/TLS-SSL-Windows-7-Good.reg Windows 7 Good Security: TLS 1.2 and 1.1] *[https://www.moonlightdesign.org/dl/TLS-SSL-Windows-Vista-XP.reg Windows Vista/XP: TLS 1.0 Only] *[https://www.moonlightdesign.org/dl/TLS-SSL-Insecure.reg Insecure: SSL 3.0 and TLS 1.0] *[https://www.moonlightdesign.org/dl/TLS-SSL-Highly-Insecure.reg Highly Insecure: SSL 3.0 only] **TLS 1.0 remains enabled in Windows Schannel, but it's off in Internet Explorer in this file. 12c23266d4751723a67e2eef9ab60461695da078 2275 2274 2014-10-18T22:23:37Z Stevenlawrance 1 /* Configure Without Group Policies */ wikitext text/x-wiki As a way to mitigate the [https://www.openssl.org/~bodo/ssl-poodle.pdf Padding Oracle On Downgraded Legacy Encryption (POODLE) attack], information technology (IT) administrators can disable all protocols older than TLSv1 via ActiveDirectory group policies. This page describes how to do that. Using the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] with the group policy editor allows IT administrators to deploy computer-level policies that disable legacy protocols within Windows Schannel and deploy user-level policies that disable legacy protocols within Internet Explorer. Note that a computer-level disable policy for a protocol overrides Internet Explorer's configuration for that protocol. This template implements [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommended registry settings to disable SSLv3]. Please note that Microsoft has a group policy setting for disabling TLS/SSL protocols in Internet Explorer, as described in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 their recommendations], but it doesn't work reliably with Internet Explorer 6 or 7. As a result, Microsoft noted in their policy template that it works only with Internet Explorer 8 and higher. If you run Internet Explorer 6 or 7, then the group policy template described on this page is a tenable option for you. The computer policies in this policy template are also useful to IT administrators whom are targeting only Internet Explorer 8 or higher. To handle systems that are not covered by group policies, this page also includes registry merge files for convenience. ==Configure With Group Policies== To use the group policies, you'll need to install the policy template file. The policy template includes two group policy targets for configuration: Computer and User. ===Installation=== Save the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] as TLS-SSL-Protocols.adm within your Windows INF folder. This is typically <code>C:\Windows\INF</code>. ===Computer Policies=== The Computer policies configure the Windows Schannel protocol support, which impacts client software and server software with dedicated settings for each. Internet Explorer, email software, and any program that connects to the local network or Internet and uses Windows Schannel for securing its connections are affected by the client policies. Internet Information Server, .NET server software, and any program that listens for and accepts secure connections from the local network or Internet and uses Windows Schannel for securing connections are affected by the server policies. Mozilla Firefox, Google Chrome, and Java, however, use their own software for securing connections and aren't affected by the client policies. Similarly, Java and software that uses OpenSSL (Apache, etc) or other non-Schannel software aren't affected by the server policies. To get started, either create a new group policy or edit an existing group policy that applies to groups of computers. The computer policy won't have an effect if it applies only to users and not to computers. ====Add the Policy Template==== Right-click on the Computer Configuration | Administrative Templates folder. Alternatively, right-clicking on the User Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|650px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|370px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|475px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|370px]] ====Show All Policy Settings==== By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the Computer Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-Computer.png|650px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|350px]] ====TLS/SSL Protocols==== Open the TLS/SSL Protocols folder within the Computer Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-Computer.png|650px]] If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then enable TLS 1.0 for client and server use while disabling PCT 1.0, SSL 2.0, and SSL 3.0 for client and server use. The screenshot above shows what this configuration looks like. The Group Policy Editor makes configuration convenient with the Next Setting button, as shown in the screenshot below. Starting with the first setting, position the dialog box such that the recommendation for that setting at the top of the "Description:" line is visible. Apply that recommendation to every setting in this list, clicking Next Setting to navigate to the next setting. Click OK when done. After clicking OK, this group policy is ready to get picked up by computers upon their next application of the computer group policies to their local computer. Running gpupdate.exe on the computers that have this group policy assigned to them will cause them to pick up the change before gpupdate.exe returns. [[File:Policies-Computer-SSLv3Client.png|650px]] If your network is comprised entirely of Windows Server 2008 R2, Windows 7, or newer operating systems, then disabling TLS 1.0 can improve security further, though the author of this template hasn't yet tried disabling TLS 1.0 at the computer level in such a network. ===User Policy=== The User policy configures Internet Explorer and has been tested with versions 6 and higher. If you are targeting only Internet Explorer 8 or higher, it is recommended that you instead use the group policy for disabling TLS/SSL protocols as documented in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommendations for mitigating the POODLE attack]. Microsoft's built-in group policy, however, doesn't work reliably with Internet Explorer 6 and 7. To get started, either create a new group policy or edit an existing group policy that applies to groups of users. The user policy won't have an effect if it applies only to computers and not to users. ====Add the Policy Template==== Right-click on the User Configuration | Administrative Templates folder. Alternatively, right-clicking on the Computer Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|650px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|370px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|475px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|370px]] ====Show All Policy Settings==== By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the User Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-User.png|650px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|350px]] ====TLS/SSL Protocols==== Open the TLS/SSL Protocols folder within the User Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-User.png|650px]] Edit the policy setting and choose the Enabled radio button. If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then choose the Recommended item. Although those operating systems don't implement TLS 1.1 and 1.2, enabling TLS 1.1 and 1.2 is properly ignored by those older operating systems while being enabled on Windows 7, Windows Server 2008 R2, and newer operating systems. If all systems on your network run Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier, then the Windows Vista/XP option is feasible as that enables only TLS 1.0, but it's typically best to choose Recommended as that will allow upgraded systems to prefer TLS 1.1 and 1.2. If all systems on your network run Windows 7, Windows Server 2008 R2, or newer operating systems, then the Recommended setting works, but the Windows 7 Best Security and Windows 7 Good Security items provide stronger security. If you choose Windows 7 Best Security, then only TLS 1.2 will be used, and that will give your secure connections maximum protection against known attacks. If some web sites that your organization use support TLS 1.1 as their highest protocol, then the Windows 7 Good Security item enables TLS 1.1 while preferring TLS 1.2. Some web sites may support only TLS 1.0 as their strongest option, and working with such web sites requires choosing the Recommended item. The Insecure and Highly Insecure items should never be used for medium or long term production use. They are present primarily for testing and as a short-term fallback if needed. Don't use them unless if it's absolutely necessary for a short time period. While enabled, your secure connections will effectively be as secure as using no encryption at all, even if Internet Explorer is using TLS 1.0 or higher. It's possible for a downgrade attack to cause Internet Explorer or the remote server to drop down to SSL 3.0, and disabling SSL 3.0 entirely is an effective mitigation against a downgrade attack to SSL 3.0. [[File:Policies-User-IE.png|375px]] Click OK when done. After clicking OK, this group policy is ready to get picked up by users upon their next application of the user group policies. Having the users log out and back in or having the users run gpupdate.exe will cause them to pick up the change. Please note that users can update this setting within Internet Explorer's configuration options. This policy won't overwrite their customizations unless if this policy is changed to another value or if all policies are reapplied to that user, such as with 'gpupdate /force'. ==Configure Without Group Policies== To quickly configure a computer that doesn't have group policies, it is possible to use a registry merge file. The following files implement their stated configuration scenarios: *[https://www.moonlightdesign.org/dl/TLS-SSL-Recommended.reg Recommended: TLS 1.2, 1.1, and 1.0] **Compatible with all versions of Windows that implement TLS 1.0, including those that don't implement TLS 1.1 and 1.2. *[https://www.moonlightdesign.org/dl/TLS-SSL-Windows-7-Best.reg Windows 7 Best Security: TLS 1.2 only] *[https://www.moonlightdesign.org/dl/TLS-SSL-Windows-7-Good.reg Windows 7 Good Security: TLS 1.2 and 1.1] *[https://www.moonlightdesign.org/dl/TLS-SSL-Windows-Vista-XP.reg Windows Vista/XP: TLS 1.0 Only] *[https://www.moonlightdesign.org/dl/TLS-SSL-Insecure.reg Insecure: SSL 3.0 and TLS 1.0] *[https://www.moonlightdesign.org/dl/TLS-SSL-Highly-Insecure.reg Highly Insecure: SSL 3.0 only] **TLS 1.0 remains enabled in Windows Schannel, but it's off in Internet Explorer with this file. 571c2d3551674489a010d20885ee0345c3866003 2276 2275 2014-10-18T22:47:18Z Stevenlawrance 1 /* Configure Without Group Policies */ wikitext text/x-wiki As a way to mitigate the [https://www.openssl.org/~bodo/ssl-poodle.pdf Padding Oracle On Downgraded Legacy Encryption (POODLE) attack], information technology (IT) administrators can disable all protocols older than TLSv1 via ActiveDirectory group policies. This page describes how to do that. Using the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] with the group policy editor allows IT administrators to deploy computer-level policies that disable legacy protocols within Windows Schannel and deploy user-level policies that disable legacy protocols within Internet Explorer. Note that a computer-level disable policy for a protocol overrides Internet Explorer's configuration for that protocol. This template implements [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommended registry settings to disable SSLv3]. Please note that Microsoft has a group policy setting for disabling TLS/SSL protocols in Internet Explorer, as described in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 their recommendations], but it doesn't work reliably with Internet Explorer 6 or 7. As a result, Microsoft noted in their policy template that it works only with Internet Explorer 8 and higher. If you run Internet Explorer 6 or 7, then the group policy template described on this page is a tenable option for you. The computer policies in this policy template are also useful to IT administrators whom are targeting only Internet Explorer 8 or higher. To handle systems that are not covered by group policies, this page also includes registry merge files for convenience. ==Configure With Group Policies== To use the group policies, you'll need to install the policy template file. The policy template includes two group policy targets for configuration: Computer and User. ===Installation=== Save the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] as TLS-SSL-Protocols.adm within your Windows INF folder. This is typically <code>C:\Windows\INF</code>. ===Computer Policies=== The Computer policies configure the Windows Schannel protocol support, which impacts client software and server software with dedicated settings for each. Internet Explorer, email software, and any program that connects to the local network or Internet and uses Windows Schannel for securing its connections are affected by the client policies. Internet Information Server, .NET server software, and any program that listens for and accepts secure connections from the local network or Internet and uses Windows Schannel for securing connections are affected by the server policies. Mozilla Firefox, Google Chrome, and Java, however, use their own software for securing connections and aren't affected by the client policies. Similarly, Java and software that uses OpenSSL (Apache, etc) or other non-Schannel software aren't affected by the server policies. To get started, either create a new group policy or edit an existing group policy that applies to groups of computers. The computer policy won't have an effect if it applies only to users and not to computers. ====Add the Policy Template==== Right-click on the Computer Configuration | Administrative Templates folder. Alternatively, right-clicking on the User Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|650px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|370px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|475px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|370px]] ====Show All Policy Settings==== By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the Computer Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-Computer.png|650px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|350px]] ====TLS/SSL Protocols==== Open the TLS/SSL Protocols folder within the Computer Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-Computer.png|650px]] If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then enable TLS 1.0 for client and server use while disabling PCT 1.0, SSL 2.0, and SSL 3.0 for client and server use. The screenshot above shows what this configuration looks like. The Group Policy Editor makes configuration convenient with the Next Setting button, as shown in the screenshot below. Starting with the first setting, position the dialog box such that the recommendation for that setting at the top of the "Description:" line is visible. Apply that recommendation to every setting in this list, clicking Next Setting to navigate to the next setting. Click OK when done. After clicking OK, this group policy is ready to get picked up by computers upon their next application of the computer group policies to their local computer. Running gpupdate.exe on the computers that have this group policy assigned to them will cause them to pick up the change before gpupdate.exe returns. [[File:Policies-Computer-SSLv3Client.png|650px]] If your network is comprised entirely of Windows Server 2008 R2, Windows 7, or newer operating systems, then disabling TLS 1.0 can improve security further, though the author of this template hasn't yet tried disabling TLS 1.0 at the computer level in such a network. ===User Policy=== The User policy configures Internet Explorer and has been tested with versions 6 and higher. If you are targeting only Internet Explorer 8 or higher, it is recommended that you instead use the group policy for disabling TLS/SSL protocols as documented in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommendations for mitigating the POODLE attack]. Microsoft's built-in group policy, however, doesn't work reliably with Internet Explorer 6 and 7. To get started, either create a new group policy or edit an existing group policy that applies to groups of users. The user policy won't have an effect if it applies only to computers and not to users. ====Add the Policy Template==== Right-click on the User Configuration | Administrative Templates folder. Alternatively, right-clicking on the Computer Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|650px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|370px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|475px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|370px]] ====Show All Policy Settings==== By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the User Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-User.png|650px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|350px]] ====TLS/SSL Protocols==== Open the TLS/SSL Protocols folder within the User Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-User.png|650px]] Edit the policy setting and choose the Enabled radio button. If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then choose the Recommended item. Although those operating systems don't implement TLS 1.1 and 1.2, enabling TLS 1.1 and 1.2 is properly ignored by those older operating systems while being enabled on Windows 7, Windows Server 2008 R2, and newer operating systems. If all systems on your network run Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier, then the Windows Vista/XP option is feasible as that enables only TLS 1.0, but it's typically best to choose Recommended as that will allow upgraded systems to prefer TLS 1.1 and 1.2. If all systems on your network run Windows 7, Windows Server 2008 R2, or newer operating systems, then the Recommended setting works, but the Windows 7 Best Security and Windows 7 Good Security items provide stronger security. If you choose Windows 7 Best Security, then only TLS 1.2 will be used, and that will give your secure connections maximum protection against known attacks. If some web sites that your organization use support TLS 1.1 as their highest protocol, then the Windows 7 Good Security item enables TLS 1.1 while preferring TLS 1.2. Some web sites may support only TLS 1.0 as their strongest option, and working with such web sites requires choosing the Recommended item. The Insecure and Highly Insecure items should never be used for medium or long term production use. They are present primarily for testing and as a short-term fallback if needed. Don't use them unless if it's absolutely necessary for a short time period. While enabled, your secure connections will effectively be as secure as using no encryption at all, even if Internet Explorer is using TLS 1.0 or higher. It's possible for a downgrade attack to cause Internet Explorer or the remote server to drop down to SSL 3.0, and disabling SSL 3.0 entirely is an effective mitigation against a downgrade attack to SSL 3.0. [[File:Policies-User-IE.png|375px]] Click OK when done. After clicking OK, this group policy is ready to get picked up by users upon their next application of the user group policies. Having the users log out and back in or having the users run gpupdate.exe will cause them to pick up the change. Please note that users can update this setting within Internet Explorer's configuration options. This policy won't overwrite their customizations unless if this policy is changed to another value or if all policies are reapplied to that user, such as with 'gpupdate /force'. ==Configure Without Group Policies== To quickly configure a computer that doesn't have group policies, it is possible to use a registry merge file. The following files implement their stated configuration scenarios: *[https://www.moonlightdesign.org/dl/TLS-SSL-Recommended.reg Recommended: TLS 1.2, 1.1, and 1.0] **Compatible with all versions of Windows that implement TLS 1.0, including those that don't implement TLS 1.1 and 1.2. *[https://www.moonlightdesign.org/dl/TLS-SSL-Windows-7-Best.reg Windows 7 Best Security: TLS 1.2 only] **TLS 1.0 remains enabled in Windows Schannel, but it's off in Internet Explorer with this file. Internet Explorer 11 doesn't start in Windows 8 when TLS 1.0 is disabled in Schannel. *[https://www.moonlightdesign.org/dl/TLS-SSL-Windows-7-Good.reg Windows 7 Good Security: TLS 1.2 and 1.1] **TLS 1.0 remains enabled in Windows Schannel, but it's off in Internet Explorer with this file. Internet Explorer 11 doesn't start in Windows 8 when TLS 1.0 is disabled in Schannel. *[https://www.moonlightdesign.org/dl/TLS-SSL-Windows-Vista-XP.reg Windows Vista/XP: TLS 1.0 Only] *[https://www.moonlightdesign.org/dl/TLS-SSL-Insecure.reg Insecure: SSL 3.0 and TLS 1.0] *[https://www.moonlightdesign.org/dl/TLS-SSL-Highly-Insecure.reg Highly Insecure: SSL 3.0 only] **TLS 1.0 remains enabled in Windows Schannel, but it's off in Internet Explorer with this file. 1fc1a9f23472e10544cfb97f14abec5522f61541 2277 2276 2014-10-18T22:54:09Z Stevenlawrance 1 /* Configure With Group Policies */ wikitext text/x-wiki As a way to mitigate the [https://www.openssl.org/~bodo/ssl-poodle.pdf Padding Oracle On Downgraded Legacy Encryption (POODLE) attack], information technology (IT) administrators can disable all protocols older than TLSv1 via ActiveDirectory group policies. This page describes how to do that. Using the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] with the group policy editor allows IT administrators to deploy computer-level policies that disable legacy protocols within Windows Schannel and deploy user-level policies that disable legacy protocols within Internet Explorer. Note that a computer-level disable policy for a protocol overrides Internet Explorer's configuration for that protocol. This template implements [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommended registry settings to disable SSLv3]. Please note that Microsoft has a group policy setting for disabling TLS/SSL protocols in Internet Explorer, as described in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 their recommendations], but it doesn't work reliably with Internet Explorer 6 or 7. As a result, Microsoft noted in their policy template that it works only with Internet Explorer 8 and higher. If you run Internet Explorer 6 or 7, then the group policy template described on this page is a tenable option for you. The computer policies in this policy template are also useful to IT administrators whom are targeting only Internet Explorer 8 or higher. To handle systems that are not covered by group policies, this page also includes registry merge files for convenience. ==Configure With Group Policies== To use the group policies, you'll need to install the policy template file. The policy template includes two group policy targets for configuration: Computer and User. ===Installation=== Save the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] as TLS-SSL-Protocols.adm within your Windows INF folder. This is typically <code>C:\Windows\INF</code>. ===Computer Policies=== The Computer policies configure the Windows Schannel protocol support, which impacts client software and server software with dedicated settings for each. Internet Explorer, email software, and any program that connects to the local network or Internet and uses Windows Schannel for securing its connections are affected by the client policies. Internet Information Server, .NET server software, and any program that listens for and accepts secure connections from the local network or Internet and uses Windows Schannel for securing connections are affected by the server policies. Mozilla Firefox, Google Chrome, and Java, however, use their own software for securing connections and aren't affected by the client policies. Similarly, Java and software that uses OpenSSL (Apache, etc) or other non-Schannel software aren't affected by the server policies. To get started, either create a new group policy or edit an existing group policy that applies to groups of computers. The computer policy won't have an effect if it applies only to users and not to computers. ====Add the Policy Template==== Right-click on the Computer Configuration | Administrative Templates folder. Alternatively, right-clicking on the User Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|650px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|370px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|475px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|370px]] ====Show All Policy Settings==== By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the Computer Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-Computer.png|650px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|350px]] ====TLS/SSL Protocols==== Open the TLS/SSL Protocols folder within the Computer Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-Computer.png|650px]] If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then enable TLS 1.0 for client and server use while disabling PCT 1.0, SSL 2.0, and SSL 3.0 for client and server use. The screenshot above shows what this configuration looks like. The Group Policy Editor makes configuration convenient with the Next Setting button, as shown in the screenshot below. Starting with the first setting, position the dialog box such that the recommendation for that setting at the top of the "Description:" line is visible. Apply that recommendation to every setting in this list, clicking Next Setting to navigate to the next setting. Click OK when done. After clicking OK, this group policy is ready to get picked up by computers upon their next application of the computer group policies to their local computer. Running gpupdate.exe on the computers that have this group policy assigned to them will cause them to pick up the change before gpupdate.exe returns. [[File:Policies-Computer-SSLv3Client.png|650px]] If your network is comprised entirely of Windows Server 2008 R2, Windows 7, or newer operating systems, then disabling TLS 1.0 can theoretically improve security further, but when this was tested in Windows 8 with Internet Explorer 11, Internet Explorer 11 wouldn't start up successfully until TLS 1.0 was enabled in Schannel. As a result, TLS 1.0 will need to be left enabled in Windows Schannel, even if it's disabled in Internet Explorer. ===User Policy=== The User policy configures Internet Explorer and has been tested with versions 6 and higher. If you are targeting only Internet Explorer 8 or higher, it is recommended that you instead use the group policy for disabling TLS/SSL protocols as documented in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommendations for mitigating the POODLE attack]. Microsoft's built-in group policy, however, doesn't work reliably with Internet Explorer 6 and 7. To get started, either create a new group policy or edit an existing group policy that applies to groups of users. The user policy won't have an effect if it applies only to computers and not to users. ====Add the Policy Template==== Right-click on the User Configuration | Administrative Templates folder. Alternatively, right-clicking on the Computer Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|650px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|370px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|475px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|370px]] ====Show All Policy Settings==== By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the User Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-User.png|650px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|350px]] ====TLS/SSL Protocols==== Open the TLS/SSL Protocols folder within the User Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-User.png|650px]] Edit the policy setting and choose the Enabled radio button. If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then choose the Recommended item. Although those operating systems don't implement TLS 1.1 and 1.2, enabling TLS 1.1 and 1.2 is properly ignored by those older operating systems while being enabled on Windows 7, Windows Server 2008 R2, and newer operating systems. If all systems on your network run Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier, then the Windows Vista/XP option is feasible as that enables only TLS 1.0, but it's typically best to choose Recommended as that will allow upgraded systems to prefer TLS 1.1 and 1.2. If all systems on your network run Windows 7, Windows Server 2008 R2, or newer operating systems, then the Recommended setting works, but the Windows 7 Best Security and Windows 7 Good Security items provide stronger security. If you choose Windows 7 Best Security, then only TLS 1.2 will be used, and that will give your secure connections maximum protection against known attacks. If some web sites that your organization use support TLS 1.1 as their highest protocol, then the Windows 7 Good Security item enables TLS 1.1 while preferring TLS 1.2. Some web sites may support only TLS 1.0 as their strongest option, and working with such web sites requires choosing the Recommended item. The Insecure and Highly Insecure items should never be used for medium or long term production use. They are present primarily for testing and as a short-term fallback if needed. Don't use them unless if it's absolutely necessary for a short time period. While enabled, your secure connections will effectively be as secure as using no encryption at all, even if Internet Explorer is using TLS 1.0 or higher. It's possible for a downgrade attack to cause Internet Explorer or the remote server to drop down to SSL 3.0, and disabling SSL 3.0 entirely is an effective mitigation against a downgrade attack to SSL 3.0. [[File:Policies-User-IE.png|375px]] Click OK when done. After clicking OK, this group policy is ready to get picked up by users upon their next application of the user group policies. Having the users log out and back in or having the users run gpupdate.exe will cause them to pick up the change. Please note that users can update this setting within Internet Explorer's configuration options. This policy won't overwrite their customizations unless if this policy is changed to another value or if all policies are reapplied to that user, such as with 'gpupdate /force'. ==Configure Without Group Policies== To quickly configure a computer that doesn't have group policies, it is possible to use a registry merge file. The following files implement their stated configuration scenarios: *[https://www.moonlightdesign.org/dl/TLS-SSL-Recommended.reg Recommended: TLS 1.2, 1.1, and 1.0] **Compatible with all versions of Windows that implement TLS 1.0, including those that don't implement TLS 1.1 and 1.2. *[https://www.moonlightdesign.org/dl/TLS-SSL-Windows-7-Best.reg Windows 7 Best Security: TLS 1.2 only] **TLS 1.0 remains enabled in Windows Schannel, but it's off in Internet Explorer with this file. Internet Explorer 11 doesn't start in Windows 8 when TLS 1.0 is disabled in Schannel. *[https://www.moonlightdesign.org/dl/TLS-SSL-Windows-7-Good.reg Windows 7 Good Security: TLS 1.2 and 1.1] **TLS 1.0 remains enabled in Windows Schannel, but it's off in Internet Explorer with this file. Internet Explorer 11 doesn't start in Windows 8 when TLS 1.0 is disabled in Schannel. *[https://www.moonlightdesign.org/dl/TLS-SSL-Windows-Vista-XP.reg Windows Vista/XP: TLS 1.0 Only] *[https://www.moonlightdesign.org/dl/TLS-SSL-Insecure.reg Insecure: SSL 3.0 and TLS 1.0] *[https://www.moonlightdesign.org/dl/TLS-SSL-Highly-Insecure.reg Highly Insecure: SSL 3.0 only] **TLS 1.0 remains enabled in Windows Schannel, but it's off in Internet Explorer with this file. 27315119c3d1e7b553cb9ffd4b2eebf3887c683a 2278 2277 2014-10-20T13:39:45Z Stevenlawrance 1 /* Configure Without Group Policies */ wikitext text/x-wiki As a way to mitigate the [https://www.openssl.org/~bodo/ssl-poodle.pdf Padding Oracle On Downgraded Legacy Encryption (POODLE) attack], information technology (IT) administrators can disable all protocols older than TLSv1 via ActiveDirectory group policies. This page describes how to do that. Using the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] with the group policy editor allows IT administrators to deploy computer-level policies that disable legacy protocols within Windows Schannel and deploy user-level policies that disable legacy protocols within Internet Explorer. Note that a computer-level disable policy for a protocol overrides Internet Explorer's configuration for that protocol. This template implements [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommended registry settings to disable SSLv3]. Please note that Microsoft has a group policy setting for disabling TLS/SSL protocols in Internet Explorer, as described in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 their recommendations], but it doesn't work reliably with Internet Explorer 6 or 7. As a result, Microsoft noted in their policy template that it works only with Internet Explorer 8 and higher. If you run Internet Explorer 6 or 7, then the group policy template described on this page is a tenable option for you. The computer policies in this policy template are also useful to IT administrators whom are targeting only Internet Explorer 8 or higher. To handle systems that are not covered by group policies, this page also includes registry merge files for convenience. ==Configure With Group Policies== To use the group policies, you'll need to install the policy template file. The policy template includes two group policy targets for configuration: Computer and User. ===Installation=== Save the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] as TLS-SSL-Protocols.adm within your Windows INF folder. This is typically <code>C:\Windows\INF</code>. ===Computer Policies=== The Computer policies configure the Windows Schannel protocol support, which impacts client software and server software with dedicated settings for each. Internet Explorer, email software, and any program that connects to the local network or Internet and uses Windows Schannel for securing its connections are affected by the client policies. Internet Information Server, .NET server software, and any program that listens for and accepts secure connections from the local network or Internet and uses Windows Schannel for securing connections are affected by the server policies. Mozilla Firefox, Google Chrome, and Java, however, use their own software for securing connections and aren't affected by the client policies. Similarly, Java and software that uses OpenSSL (Apache, etc) or other non-Schannel software aren't affected by the server policies. To get started, either create a new group policy or edit an existing group policy that applies to groups of computers. The computer policy won't have an effect if it applies only to users and not to computers. ====Add the Policy Template==== Right-click on the Computer Configuration | Administrative Templates folder. Alternatively, right-clicking on the User Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|650px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|370px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|475px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|370px]] ====Show All Policy Settings==== By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the Computer Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-Computer.png|650px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|350px]] ====TLS/SSL Protocols==== Open the TLS/SSL Protocols folder within the Computer Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-Computer.png|650px]] If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then enable TLS 1.0 for client and server use while disabling PCT 1.0, SSL 2.0, and SSL 3.0 for client and server use. The screenshot above shows what this configuration looks like. The Group Policy Editor makes configuration convenient with the Next Setting button, as shown in the screenshot below. Starting with the first setting, position the dialog box such that the recommendation for that setting at the top of the "Description:" line is visible. Apply that recommendation to every setting in this list, clicking Next Setting to navigate to the next setting. Click OK when done. After clicking OK, this group policy is ready to get picked up by computers upon their next application of the computer group policies to their local computer. Running gpupdate.exe on the computers that have this group policy assigned to them will cause them to pick up the change before gpupdate.exe returns. [[File:Policies-Computer-SSLv3Client.png|650px]] If your network is comprised entirely of Windows Server 2008 R2, Windows 7, or newer operating systems, then disabling TLS 1.0 can theoretically improve security further, but when this was tested in Windows 8 with Internet Explorer 11, Internet Explorer 11 wouldn't start up successfully until TLS 1.0 was enabled in Schannel. As a result, TLS 1.0 will need to be left enabled in Windows Schannel, even if it's disabled in Internet Explorer. ===User Policy=== The User policy configures Internet Explorer and has been tested with versions 6 and higher. If you are targeting only Internet Explorer 8 or higher, it is recommended that you instead use the group policy for disabling TLS/SSL protocols as documented in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommendations for mitigating the POODLE attack]. Microsoft's built-in group policy, however, doesn't work reliably with Internet Explorer 6 and 7. To get started, either create a new group policy or edit an existing group policy that applies to groups of users. The user policy won't have an effect if it applies only to computers and not to users. ====Add the Policy Template==== Right-click on the User Configuration | Administrative Templates folder. Alternatively, right-clicking on the Computer Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|650px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|370px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|475px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|370px]] ====Show All Policy Settings==== By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the User Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-User.png|650px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|350px]] ====TLS/SSL Protocols==== Open the TLS/SSL Protocols folder within the User Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-User.png|650px]] Edit the policy setting and choose the Enabled radio button. If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then choose the Recommended item. Although those operating systems don't implement TLS 1.1 and 1.2, enabling TLS 1.1 and 1.2 is properly ignored by those older operating systems while being enabled on Windows 7, Windows Server 2008 R2, and newer operating systems. If all systems on your network run Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier, then the Windows Vista/XP option is feasible as that enables only TLS 1.0, but it's typically best to choose Recommended as that will allow upgraded systems to prefer TLS 1.1 and 1.2. If all systems on your network run Windows 7, Windows Server 2008 R2, or newer operating systems, then the Recommended setting works, but the Windows 7 Best Security and Windows 7 Good Security items provide stronger security. If you choose Windows 7 Best Security, then only TLS 1.2 will be used, and that will give your secure connections maximum protection against known attacks. If some web sites that your organization use support TLS 1.1 as their highest protocol, then the Windows 7 Good Security item enables TLS 1.1 while preferring TLS 1.2. Some web sites may support only TLS 1.0 as their strongest option, and working with such web sites requires choosing the Recommended item. The Insecure and Highly Insecure items should never be used for medium or long term production use. They are present primarily for testing and as a short-term fallback if needed. Don't use them unless if it's absolutely necessary for a short time period. While enabled, your secure connections will effectively be as secure as using no encryption at all, even if Internet Explorer is using TLS 1.0 or higher. It's possible for a downgrade attack to cause Internet Explorer or the remote server to drop down to SSL 3.0, and disabling SSL 3.0 entirely is an effective mitigation against a downgrade attack to SSL 3.0. [[File:Policies-User-IE.png|375px]] Click OK when done. After clicking OK, this group policy is ready to get picked up by users upon their next application of the user group policies. Having the users log out and back in or having the users run gpupdate.exe will cause them to pick up the change. Please note that users can update this setting within Internet Explorer's configuration options. This policy won't overwrite their customizations unless if this policy is changed to another value or if all policies are reapplied to that user, such as with 'gpupdate /force'. ==Configure Without Group Policies== To quickly configure a computer that doesn't have group policies, it is possible to use a registry merge file. The following files implement their stated configuration scenarios: *[https://www.moonlightdesign.org/dl/TLS-SSL-Recommended.reg Recommended: TLS 1.2, 1.1, and 1.0] **Compatible with all versions of Windows that implement TLS 1.0, including those that don't implement TLS 1.1 and 1.2. *[https://www.moonlightdesign.org/dl/TLS-SSL-Windows-7-Best.reg Windows 7 Best Security: TLS 1.2 only] **A significant number of web sites on the Internet won't work at this time with this configuration. **TLS 1.0 remains enabled in Windows Schannel, but it's off in Internet Explorer with this file. Internet Explorer 11 doesn't start in Windows 8 when TLS 1.0 is disabled in Schannel. *[https://www.moonlightdesign.org/dl/TLS-SSL-Windows-7-Good.reg Windows 7 Good Security: TLS 1.2 and 1.1] **A significant number of web sites on the Internet won't work at this time with this configuration. **TLS 1.0 remains enabled in Windows Schannel, but it's off in Internet Explorer with this file. Internet Explorer 11 doesn't start in Windows 8 when TLS 1.0 is disabled in Schannel. *[https://www.moonlightdesign.org/dl/TLS-SSL-Windows-Vista-XP.reg Windows Vista/XP: TLS 1.0 Only] **Don't use this on Windows 7, Windows Server 2008 R2, or newer as it disables TLS 1.1 and TLS 1.2 in Internet Explorer. *[https://www.moonlightdesign.org/dl/TLS-SSL-Insecure.reg Insecure: SSL 3.0 and TLS 1.0] **Don't use this unless if absolutely necessary. This configuration opens up your https connections to attack and should be equivalent to having no encryption. *[https://www.moonlightdesign.org/dl/TLS-SSL-Highly-Insecure.reg Highly Insecure: SSL 3.0 only] **Don't use this unless if absolutely necessary. This configuration opens up your https connections to attack and should be equivalent to having no encryption. **TLS 1.0 remains enabled in Windows Schannel, but it's off in Internet Explorer with this file. 23d394434aa9a6bce9893c7fc62ec40f1beec4f7 2279 2278 2014-10-20T13:40:49Z Stevenlawrance 1 /* Configure Without Group Policies */ wikitext text/x-wiki As a way to mitigate the [https://www.openssl.org/~bodo/ssl-poodle.pdf Padding Oracle On Downgraded Legacy Encryption (POODLE) attack], information technology (IT) administrators can disable all protocols older than TLSv1 via ActiveDirectory group policies. This page describes how to do that. Using the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] with the group policy editor allows IT administrators to deploy computer-level policies that disable legacy protocols within Windows Schannel and deploy user-level policies that disable legacy protocols within Internet Explorer. Note that a computer-level disable policy for a protocol overrides Internet Explorer's configuration for that protocol. This template implements [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommended registry settings to disable SSLv3]. Please note that Microsoft has a group policy setting for disabling TLS/SSL protocols in Internet Explorer, as described in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 their recommendations], but it doesn't work reliably with Internet Explorer 6 or 7. As a result, Microsoft noted in their policy template that it works only with Internet Explorer 8 and higher. If you run Internet Explorer 6 or 7, then the group policy template described on this page is a tenable option for you. The computer policies in this policy template are also useful to IT administrators whom are targeting only Internet Explorer 8 or higher. To handle systems that are not covered by group policies, this page also includes registry merge files for convenience. ==Configure With Group Policies== To use the group policies, you'll need to install the policy template file. The policy template includes two group policy targets for configuration: Computer and User. ===Installation=== Save the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] as TLS-SSL-Protocols.adm within your Windows INF folder. This is typically <code>C:\Windows\INF</code>. ===Computer Policies=== The Computer policies configure the Windows Schannel protocol support, which impacts client software and server software with dedicated settings for each. Internet Explorer, email software, and any program that connects to the local network or Internet and uses Windows Schannel for securing its connections are affected by the client policies. Internet Information Server, .NET server software, and any program that listens for and accepts secure connections from the local network or Internet and uses Windows Schannel for securing connections are affected by the server policies. Mozilla Firefox, Google Chrome, and Java, however, use their own software for securing connections and aren't affected by the client policies. Similarly, Java and software that uses OpenSSL (Apache, etc) or other non-Schannel software aren't affected by the server policies. To get started, either create a new group policy or edit an existing group policy that applies to groups of computers. The computer policy won't have an effect if it applies only to users and not to computers. ====Add the Policy Template==== Right-click on the Computer Configuration | Administrative Templates folder. Alternatively, right-clicking on the User Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|650px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|370px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|475px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|370px]] ====Show All Policy Settings==== By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the Computer Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-Computer.png|650px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|350px]] ====TLS/SSL Protocols==== Open the TLS/SSL Protocols folder within the Computer Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-Computer.png|650px]] If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then enable TLS 1.0 for client and server use while disabling PCT 1.0, SSL 2.0, and SSL 3.0 for client and server use. The screenshot above shows what this configuration looks like. The Group Policy Editor makes configuration convenient with the Next Setting button, as shown in the screenshot below. Starting with the first setting, position the dialog box such that the recommendation for that setting at the top of the "Description:" line is visible. Apply that recommendation to every setting in this list, clicking Next Setting to navigate to the next setting. Click OK when done. After clicking OK, this group policy is ready to get picked up by computers upon their next application of the computer group policies to their local computer. Running gpupdate.exe on the computers that have this group policy assigned to them will cause them to pick up the change before gpupdate.exe returns. [[File:Policies-Computer-SSLv3Client.png|650px]] If your network is comprised entirely of Windows Server 2008 R2, Windows 7, or newer operating systems, then disabling TLS 1.0 can theoretically improve security further, but when this was tested in Windows 8 with Internet Explorer 11, Internet Explorer 11 wouldn't start up successfully until TLS 1.0 was enabled in Schannel. As a result, TLS 1.0 will need to be left enabled in Windows Schannel, even if it's disabled in Internet Explorer. ===User Policy=== The User policy configures Internet Explorer and has been tested with versions 6 and higher. If you are targeting only Internet Explorer 8 or higher, it is recommended that you instead use the group policy for disabling TLS/SSL protocols as documented in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommendations for mitigating the POODLE attack]. Microsoft's built-in group policy, however, doesn't work reliably with Internet Explorer 6 and 7. To get started, either create a new group policy or edit an existing group policy that applies to groups of users. The user policy won't have an effect if it applies only to computers and not to users. ====Add the Policy Template==== Right-click on the User Configuration | Administrative Templates folder. Alternatively, right-clicking on the Computer Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|650px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|370px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|475px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|370px]] ====Show All Policy Settings==== By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the User Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-User.png|650px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|350px]] ====TLS/SSL Protocols==== Open the TLS/SSL Protocols folder within the User Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-User.png|650px]] Edit the policy setting and choose the Enabled radio button. If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then choose the Recommended item. Although those operating systems don't implement TLS 1.1 and 1.2, enabling TLS 1.1 and 1.2 is properly ignored by those older operating systems while being enabled on Windows 7, Windows Server 2008 R2, and newer operating systems. If all systems on your network run Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier, then the Windows Vista/XP option is feasible as that enables only TLS 1.0, but it's typically best to choose Recommended as that will allow upgraded systems to prefer TLS 1.1 and 1.2. If all systems on your network run Windows 7, Windows Server 2008 R2, or newer operating systems, then the Recommended setting works, but the Windows 7 Best Security and Windows 7 Good Security items provide stronger security. If you choose Windows 7 Best Security, then only TLS 1.2 will be used, and that will give your secure connections maximum protection against known attacks. If some web sites that your organization use support TLS 1.1 as their highest protocol, then the Windows 7 Good Security item enables TLS 1.1 while preferring TLS 1.2. Some web sites may support only TLS 1.0 as their strongest option, and working with such web sites requires choosing the Recommended item. The Insecure and Highly Insecure items should never be used for medium or long term production use. They are present primarily for testing and as a short-term fallback if needed. Don't use them unless if it's absolutely necessary for a short time period. While enabled, your secure connections will effectively be as secure as using no encryption at all, even if Internet Explorer is using TLS 1.0 or higher. It's possible for a downgrade attack to cause Internet Explorer or the remote server to drop down to SSL 3.0, and disabling SSL 3.0 entirely is an effective mitigation against a downgrade attack to SSL 3.0. [[File:Policies-User-IE.png|375px]] Click OK when done. After clicking OK, this group policy is ready to get picked up by users upon their next application of the user group policies. Having the users log out and back in or having the users run gpupdate.exe will cause them to pick up the change. Please note that users can update this setting within Internet Explorer's configuration options. This policy won't overwrite their customizations unless if this policy is changed to another value or if all policies are reapplied to that user, such as with 'gpupdate /force'. ==Configure Without Group Policies== To quickly configure a computer that doesn't have group policies, it is possible to use a registry merge file. The following files implement their stated configuration scenarios: *[https://www.moonlightdesign.org/dl/TLS-SSL-Recommended.reg Recommended: TLS 1.2, 1.1, and 1.0] **Compatible with all versions of Windows that implement TLS 1.0, including those that don't implement TLS 1.1 and 1.2. *[https://www.moonlightdesign.org/dl/TLS-SSL-Windows-7-Best.reg Windows 7 Best Security: TLS 1.2 only] **A significant number of web sites on the Internet won't work at this time with this configuration. **TLS 1.0 remains enabled in Windows Schannel, but it's off in Internet Explorer with this file. Internet Explorer 11 doesn't start in Windows 8 when TLS 1.0 is disabled in Schannel. *[https://www.moonlightdesign.org/dl/TLS-SSL-Windows-7-Good.reg Windows 7 Good Security: TLS 1.2 and 1.1] **A significant number of web sites on the Internet won't work at this time with this configuration. **TLS 1.0 remains enabled in Windows Schannel, but it's off in Internet Explorer with this file. Internet Explorer 11 doesn't start in Windows 8 when TLS 1.0 is disabled in Schannel. *[https://www.moonlightdesign.org/dl/TLS-SSL-Windows-Vista-XP.reg Windows Vista/XP: TLS 1.0 Only] **Don't use this on Windows 7, Windows Server 2008 R2, or newer as it disables TLS 1.1 and TLS 1.2 in Internet Explorer. *[https://www.moonlightdesign.org/dl/TLS-SSL-Insecure.reg Insecure: SSL 3.0 and TLS 1.0] **Don't use this unless if absolutely necessary. This configuration opens up your https connections to attack and should be considered equivalent to having no encryption. *[https://www.moonlightdesign.org/dl/TLS-SSL-Highly-Insecure.reg Highly Insecure: SSL 3.0 only] **Don't use this unless if absolutely necessary. This configuration opens up your https connections to attack and should be considered equivalent to having no encryption. **TLS 1.0 remains enabled in Windows Schannel, but it's off in Internet Explorer with this file. b677c5a5e122996cef047cfa10c90e09ee8fd080 2288 2279 2015-12-07T01:37:48Z Stevenlawrance 1 /* Configure Without Group Policies */ wikitext text/x-wiki As a way to mitigate the [https://www.openssl.org/~bodo/ssl-poodle.pdf Padding Oracle On Downgraded Legacy Encryption (POODLE) attack], information technology (IT) administrators can disable all protocols older than TLSv1 via ActiveDirectory group policies. This page describes how to do that. Using the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] with the group policy editor allows IT administrators to deploy computer-level policies that disable legacy protocols within Windows Schannel and deploy user-level policies that disable legacy protocols within Internet Explorer. Note that a computer-level disable policy for a protocol overrides Internet Explorer's configuration for that protocol. This template implements [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommended registry settings to disable SSLv3]. Please note that Microsoft has a group policy setting for disabling TLS/SSL protocols in Internet Explorer, as described in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 their recommendations], but it doesn't work reliably with Internet Explorer 6 or 7. As a result, Microsoft noted in their policy template that it works only with Internet Explorer 8 and higher. If you run Internet Explorer 6 or 7, then the group policy template described on this page is a tenable option for you. The computer policies in this policy template are also useful to IT administrators whom are targeting only Internet Explorer 8 or higher. To handle systems that are not covered by group policies, this page also includes registry merge files for convenience. ==Configure With Group Policies== To use the group policies, you'll need to install the policy template file. The policy template includes two group policy targets for configuration: Computer and User. ===Installation=== Save the [https://www.moonlightdesign.org/dl/TLS-SSL-Protocols.adm Windows Server 2003 compatible policy template] as TLS-SSL-Protocols.adm within your Windows INF folder. This is typically <code>C:\Windows\INF</code>. ===Computer Policies=== The Computer policies configure the Windows Schannel protocol support, which impacts client software and server software with dedicated settings for each. Internet Explorer, email software, and any program that connects to the local network or Internet and uses Windows Schannel for securing its connections are affected by the client policies. Internet Information Server, .NET server software, and any program that listens for and accepts secure connections from the local network or Internet and uses Windows Schannel for securing connections are affected by the server policies. Mozilla Firefox, Google Chrome, and Java, however, use their own software for securing connections and aren't affected by the client policies. Similarly, Java and software that uses OpenSSL (Apache, etc) or other non-Schannel software aren't affected by the server policies. To get started, either create a new group policy or edit an existing group policy that applies to groups of computers. The computer policy won't have an effect if it applies only to users and not to computers. ====Add the Policy Template==== Right-click on the Computer Configuration | Administrative Templates folder. Alternatively, right-clicking on the User Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|650px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|370px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|475px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|370px]] ====Show All Policy Settings==== By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the Computer Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-Computer.png|650px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|350px]] ====TLS/SSL Protocols==== Open the TLS/SSL Protocols folder within the Computer Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-Computer.png|650px]] If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then enable TLS 1.0 for client and server use while disabling PCT 1.0, SSL 2.0, and SSL 3.0 for client and server use. The screenshot above shows what this configuration looks like. The Group Policy Editor makes configuration convenient with the Next Setting button, as shown in the screenshot below. Starting with the first setting, position the dialog box such that the recommendation for that setting at the top of the "Description:" line is visible. Apply that recommendation to every setting in this list, clicking Next Setting to navigate to the next setting. Click OK when done. After clicking OK, this group policy is ready to get picked up by computers upon their next application of the computer group policies to their local computer. Running gpupdate.exe on the computers that have this group policy assigned to them will cause them to pick up the change before gpupdate.exe returns. [[File:Policies-Computer-SSLv3Client.png|650px]] If your network is comprised entirely of Windows Server 2008 R2, Windows 7, or newer operating systems, then disabling TLS 1.0 can theoretically improve security further, but when this was tested in Windows 8 with Internet Explorer 11, Internet Explorer 11 wouldn't start up successfully until TLS 1.0 was enabled in Schannel. As a result, TLS 1.0 will need to be left enabled in Windows Schannel, even if it's disabled in Internet Explorer. ===User Policy=== The User policy configures Internet Explorer and has been tested with versions 6 and higher. If you are targeting only Internet Explorer 8 or higher, it is recommended that you instead use the group policy for disabling TLS/SSL protocols as documented in the "Disable SSL 3.0 and enable TLS 1.0, TLS 1.1, and TLS 1.2 for Internet Explorer in Group Policy" section of [https://technet.microsoft.com/en-us/library/security/3009008.aspx#sectionToggle3 Microsoft's recommendations for mitigating the POODLE attack]. Microsoft's built-in group policy, however, doesn't work reliably with Internet Explorer 6 and 7. To get started, either create a new group policy or edit an existing group policy that applies to groups of users. The user policy won't have an effect if it applies only to computers and not to users. ====Add the Policy Template==== Right-click on the User Configuration | Administrative Templates folder. Alternatively, right-clicking on the Computer Configuration | Administrative Templates folder also works as it yields the same end-result. Click on the "Add/Remove Templates..." menu item. [[File:AddTemplate1.png|650px]] In the Add/Remove Templates dialog, click on the "Add..." button if the TLS-SSL-Protocols policy template isn't listed. [[File:AddTemplate2.png|370px]] Select the TLS-SSL-Protocols.adm file and click the Open button. [[File:AddTemplate3.png|475px]] The Add/Remove Templates dialog should now list the TLS-SSL-Protocols policy template. Press the Close button to continue. [[File:AddTemplate4.png|370px]] ====Show All Policy Settings==== By default, the Group Policy Editor doesn't display policy settings that live outside of the group policy registry trees. The settings in this policy template live outside of the group policy registry trees, so you will need to change the view filtering. To do this, right-click on the User Configuration | Administrative Templates folder, click on the View submenu, and click on the "Filtering..." menu item. [[File:Filtering-User.png|650px]] In the Filtering dialog, uncheck the "Only show policy settings that can be fully managed" checkbox. Click OK. [[File:Filtering.png|350px]] ====TLS/SSL Protocols==== Open the TLS/SSL Protocols folder within the User Configuration | Administrative Templates folder. A list of policy settings should appear. If it is empty, then the view filtering might be hiding them. Please follow the instructions above if that is happening. [[File:Policies-User.png|650px]] Edit the policy setting and choose the Enabled radio button. If you have Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier systems, then choose the Recommended item. Although those operating systems don't implement TLS 1.1 and 1.2, enabling TLS 1.1 and 1.2 is properly ignored by those older operating systems while being enabled on Windows 7, Windows Server 2008 R2, and newer operating systems. If all systems on your network run Windows XP, Vista, 2008 (without R2), 2003, 2000, NT4, or earlier, then the Windows Vista/XP option is feasible as that enables only TLS 1.0, but it's typically best to choose Recommended as that will allow upgraded systems to prefer TLS 1.1 and 1.2. If all systems on your network run Windows 7, Windows Server 2008 R2, or newer operating systems, then the Recommended setting works, but the Windows 7 Best Security and Windows 7 Good Security items provide stronger security. If you choose Windows 7 Best Security, then only TLS 1.2 will be used, and that will give your secure connections maximum protection against known attacks. If some web sites that your organization use support TLS 1.1 as their highest protocol, then the Windows 7 Good Security item enables TLS 1.1 while preferring TLS 1.2. Some web sites may support only TLS 1.0 as their strongest option, and working with such web sites requires choosing the Recommended item. The Insecure and Highly Insecure items should never be used for medium or long term production use. They are present primarily for testing and as a short-term fallback if needed. Don't use them unless if it's absolutely necessary for a short time period. While enabled, your secure connections will effectively be as secure as using no encryption at all, even if Internet Explorer is using TLS 1.0 or higher. It's possible for a downgrade attack to cause Internet Explorer or the remote server to drop down to SSL 3.0, and disabling SSL 3.0 entirely is an effective mitigation against a downgrade attack to SSL 3.0. [[File:Policies-User-IE.png|375px]] Click OK when done. After clicking OK, this group policy is ready to get picked up by users upon their next application of the user group policies. Having the users log out and back in or having the users run gpupdate.exe will cause them to pick up the change. Please note that users can update this setting within Internet Explorer's configuration options. This policy won't overwrite their customizations unless if this policy is changed to another value or if all policies are reapplied to that user, such as with 'gpupdate /force'. ==Configure Without Group Policies== To quickly configure a computer that doesn't have group policies, it is possible to use a registry merge file. The following files implement their stated configuration scenarios: *[https://www.moonlightdesign.org/dl/TLS1-1.2.reg Recommended: TLS 1.2, 1.1, and 1.0] **Compatible with all versions of Windows that implement TLS 1.0, including those that don't implement TLS 1.1 and 1.2. *[https://www.moonlightdesign.org/dl/TLS1.2.reg Windows 7 Best Security: TLS 1.2 only] **A shrinking number of web sites on the Internet won't work with this configuration. *[https://www.moonlightdesign.org/dl/TLS1-1.2.reg Windows 7 Good Security: TLS 1.2 and 1.1] **A shrinking number of web sites on the Internet won't work with this configuration. *[https://www.moonlightdesign.org/dl/TLS-SSL-Windows-Vista-XP.reg Windows Vista/XP: TLS 1.0 Only] **Don't use this on Windows 7, Windows Server 2008 R2, or newer as it disables TLS 1.1 and TLS 1.2 in Internet Explorer. *[https://www.moonlightdesign.org/dl/TLS-SSL-Insecure.reg Insecure: SSL 3.0 and TLS 1.0] **Don't use this unless if absolutely necessary. This configuration opens up your https connections to attack and should be considered equivalent to having no encryption. *[https://www.moonlightdesign.org/dl/TLS-SSL-Highly-Insecure.reg Highly Insecure: SSL 3.0 only] **Don't use this unless if absolutely necessary. This configuration opens up your https connections to attack and should be considered equivalent to having no encryption. **TLS 1.0 remains enabled in Windows Schannel, but it's off in Internet Explorer with this file. 54e99a7af1b7e804a616f413d53d4ffa70f97f2a Main Page 0 1404 2266 2212 2014-10-18T18:01:03Z Stevenlawrance 1 wikitext text/x-wiki {| |valign="top"| Welcome to Moonlight Design -- the personal web site of [[Henry Lamb]] and [[Steven Lawrance]] ==Henry Lamb== [[Henry Lamb]] is a professional [http://en.wikipedia.org/wiki/Restaurant restaurateur] trained in both [http://www.baychef.com/programs/hospitality_and_restaurant.asp restaurant management] and [http://www.baychef.com/programs/culinary_arts.asp culinary arts] at the [http://www.baychef.com/ California Culinary Academy]. For a few years from the late 1990s to the early 2000s, Henry was a [http://en.wikipedia.org/wiki/Graphic_designer graphic designer] trained at the [http://www.artinstitutes.edu/sanfrancisco/ Art Institute of San Francisco] and the [http://www.academyart.edu/ Academy of Art University] Visit Henry's new wine site: [http://glassofgrape.com/ Glass of Grape] ==Steven Lawrance== [[Steven Lawrance]] is an active practitioner of [http://en.wikipedia.org/wiki/Software_engineering software engineering] and [http://en.wikipedia.org/wiki/Open-source_software open-source software enthusiast] trained in [http://www.mse.cs.cmu.edu/ software engineering] at [http://www.mse.cs.cmu.edu/ Carnegie Mellon University] and [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ business administration] with [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems computer information systems] at [http://www.bryant.edu/ Bryant University] [[Steven Lawrance#Software Project Experience|Check out the list of software that Steve has either written or contributed to]] |valign="top" width="25%"| {|border="1" | <font size="5">[https://www.moonlightdesign.org/urllock/ IE URL Lock]</font> <font size="5">[http://gnucashtoqif.sourceforge.net/ GnuCashToQIF]</font> <font size="4">[[TLS-SSL-Protocols|TLS/SSL Protocol Group Policy Template]]</font> <font size="3">[https://www.moonlightdesign.org/dirlist DirList] [[CompactOnDelete]]</font> <font size="3">[[PortProxy]]</font> <font size="2">[[Serendipity|Team Serendipity]]</font> <font size="2">[[Disk Imager]]</font> <font size="1">[[ScreenWindowX]]</font> |} <small>[https://www.moonlightdesign.org/wireless/ Guest wireless network sign-up] (local network only)</small> |} fe1f469bab18d306c15ae10605aef6a6d10a6c9a 2280 2266 2014-10-31T14:09:40Z Stevenlawrance 1 wikitext text/x-wiki {| |valign="top"| Welcome to Moonlight Design -- the personal web site of [[Henry Lamb]] and [[Steven Lawrance]] ==Henry Lamb== [[Henry Lamb]] is a professional [http://en.wikipedia.org/wiki/Restaurant restaurateur] trained in both [http://www.baychef.com/programs/hospitality_and_restaurant.asp restaurant management] and [http://www.baychef.com/programs/culinary_arts.asp culinary arts] at the [http://www.baychef.com/ California Culinary Academy]. For a few years from the late 1990s to the early 2000s, Henry was a [http://en.wikipedia.org/wiki/Graphic_designer graphic designer] trained at the [http://www.artinstitutes.edu/sanfrancisco/ Art Institute of San Francisco] and the [http://www.academyart.edu/ Academy of Art University] Visit Henry's new wine site: [http://glassofgrape.com/ Glass of Grape] ==Steven Lawrance== [[Steven Lawrance]] is an active practitioner of [http://en.wikipedia.org/wiki/Software_engineering software engineering] and [http://en.wikipedia.org/wiki/Open-source_software open-source software enthusiast] trained in [http://www.mse.cs.cmu.edu/ software engineering] at [http://www.mse.cs.cmu.edu/ Carnegie Mellon University] and [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ business administration] with [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems computer information systems] at [http://www.bryant.edu/ Bryant University] [[Steven Lawrance#Software Project Experience|Check out the list of software that Steve has either written or contributed to]] |valign="top" width="25%"| {|border="1" | <font size="5">[https://www.moonlightdesign.org/urllock/ IE URL Lock]</font> <font size="5">[http://gnucashtoqif.sourceforge.net/ GnuCashToQIF]</font> <font size="4">[[TLS-SSL-Protocols|TLS/SSL Protocol Group Policy Template]]</font> <font size="3">[https://www.moonlightdesign.org/dirlist DirList] [[CompactOnDelete]]</font> <font size="3">[[PortProxy]]</font> <font size="2">[[Serendipity|Team Serendipity]]</font> <font size="2">[[Disk Imager]]</font> <font size="1">[[ScreenWindowX]]</font> |} <small>[https://www.moonlightdesign.org/wireless/ Guest wireless network sign-up] (local network only)</small> |} [https://www.moonlightdesign.org/msy.pdf test] 7c6264c7ce2b8246bf7c8e95e0d8f16fb720a29f 2281 2280 2014-10-31T14:10:34Z Stevenlawrance 1 wikitext text/x-wiki {| |valign="top"| Welcome to Moonlight Design -- the personal web site of [[Henry Lamb]] and [[Steven Lawrance]] ==Henry Lamb== [[Henry Lamb]] is a professional [http://en.wikipedia.org/wiki/Restaurant restaurateur] trained in both [http://www.baychef.com/programs/hospitality_and_restaurant.asp restaurant management] and [http://www.baychef.com/programs/culinary_arts.asp culinary arts] at the [http://www.baychef.com/ California Culinary Academy]. For a few years from the late 1990s to the early 2000s, Henry was a [http://en.wikipedia.org/wiki/Graphic_designer graphic designer] trained at the [http://www.artinstitutes.edu/sanfrancisco/ Art Institute of San Francisco] and the [http://www.academyart.edu/ Academy of Art University] Visit Henry's new wine site: [http://glassofgrape.com/ Glass of Grape] ==Steven Lawrance== [[Steven Lawrance]] is an active practitioner of [http://en.wikipedia.org/wiki/Software_engineering software engineering] and [http://en.wikipedia.org/wiki/Open-source_software open-source software enthusiast] trained in [http://www.mse.cs.cmu.edu/ software engineering] at [http://www.mse.cs.cmu.edu/ Carnegie Mellon University] and [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ business administration] with [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems computer information systems] at [http://www.bryant.edu/ Bryant University] [[Steven Lawrance#Software Project Experience|Check out the list of software that Steve has either written or contributed to]] |valign="top" width="25%"| {|border="1" | <font size="5">[https://www.moonlightdesign.org/urllock/ IE URL Lock]</font> <font size="5">[http://gnucashtoqif.sourceforge.net/ GnuCashToQIF]</font> <font size="4">[[TLS-SSL-Protocols|TLS/SSL Protocol Group Policy Template]]</font> <font size="3">[https://www.moonlightdesign.org/dirlist DirList] [[CompactOnDelete]]</font> <font size="3">[[PortProxy]]</font> <font size="2">[[Serendipity|Team Serendipity]]</font> <font size="2">[[Disk Imager]]</font> <font size="1">[[ScreenWindowX]]</font> |} <small>[https://www.moonlightdesign.org/wireless/ Guest wireless network sign-up] (local network only)</small> |} fe1f469bab18d306c15ae10605aef6a6d10a6c9a 2282 2281 2015-03-07T17:01:18Z Stevenlawrance 1 /* Steven Lawrance */ wikitext text/x-wiki {| |valign="top"| Welcome to Moonlight Design -- the personal web site of [[Henry Lamb]] and [[Steven Lawrance]] ==Henry Lamb== [[Henry Lamb]] is a professional [http://en.wikipedia.org/wiki/Restaurant restaurateur] trained in both [http://www.baychef.com/programs/hospitality_and_restaurant.asp restaurant management] and [http://www.baychef.com/programs/culinary_arts.asp culinary arts] at the [http://www.baychef.com/ California Culinary Academy]. For a few years from the late 1990s to the early 2000s, Henry was a [http://en.wikipedia.org/wiki/Graphic_designer graphic designer] trained at the [http://www.artinstitutes.edu/sanfrancisco/ Art Institute of San Francisco] and the [http://www.academyart.edu/ Academy of Art University] Visit Henry's new wine site: [http://glassofgrape.com/ Glass of Grape] ==Steven Lawrance== [[Steven Lawrance]] is an active practitioner of [http://en.wikipedia.org/wiki/Software_engineering software engineering] and [http://en.wikipedia.org/wiki/Open-source_software open-source software enthusiast] trained in [http://www.mse.cs.cmu.edu/ software engineering] at [http://www.mse.cs.cmu.edu/ Carnegie Mellon University] and [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ business administration] with [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems computer information systems] at [http://www.bryant.edu/ Bryant University] [[Steven Lawrance#Software Project Experience|Check out the list of software that Steven has either written or contributed to]] |valign="top" width="25%"| {|border="1" | <font size="5">[https://www.moonlightdesign.org/urllock/ IE URL Lock]</font> <font size="5">[http://gnucashtoqif.sourceforge.net/ GnuCashToQIF]</font> <font size="4">[[TLS-SSL-Protocols|TLS/SSL Protocol Group Policy Template]]</font> <font size="3">[https://www.moonlightdesign.org/dirlist DirList] [[CompactOnDelete]]</font> <font size="3">[[PortProxy]]</font> <font size="2">[[Serendipity|Team Serendipity]]</font> <font size="2">[[Disk Imager]]</font> <font size="1">[[ScreenWindowX]]</font> |} <small>[https://www.moonlightdesign.org/wireless/ Guest wireless network sign-up] (local network only)</small> |} f637fb0bfb97d5a93f10414f594638c0ec3d79f3 2284 2282 2015-06-06T14:03:37Z Stevenlawrance 1 wikitext text/x-wiki {| |valign="top"| Welcome to Moonlight Design -- the personal web site of [[Henry Lamb]] and [[Steven Lawrance]] ==Henry Lamb== [[Henry Lamb]] is a professional [http://en.wikipedia.org/wiki/Restaurant restaurateur] trained in both [http://www.baychef.com/programs/hospitality_and_restaurant.asp restaurant management] and [http://www.baychef.com/programs/culinary_arts.asp culinary arts] at the [http://www.baychef.com/ California Culinary Academy]. For a few years from the late 1990s to the early 2000s, Henry was a [http://en.wikipedia.org/wiki/Graphic_designer graphic designer] trained at the [http://www.artinstitutes.edu/sanfrancisco/ Art Institute of San Francisco] and the [http://www.academyart.edu/ Academy of Art University] Visit Henry's new wine site: [http://glassofgrape.com/ Glass of Grape] ==Steven Lawrance== [[Steven Lawrance]] is an active practitioner of [http://en.wikipedia.org/wiki/Software_engineering software engineering] and [http://en.wikipedia.org/wiki/Open-source_software open-source software enthusiast] trained in [http://www.mse.cs.cmu.edu/ software engineering] at [http://www.mse.cs.cmu.edu/ Carnegie Mellon University] and [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ business administration] with [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems computer information systems] at [http://www.bryant.edu/ Bryant University] [[Steven Lawrance#Software Project Experience|Check out the list of software that Steven has either written or contributed to]] |valign="top" width="25%"| {|border="1" | <font size="5">[https://www.moonlightdesign.org/urllock/ IE URL Lock]</font> <font size="5">[https://gnucashtoqif.us/ GnuCashToQIF]</font> <font size="4">[[TLS-SSL-Protocols|TLS/SSL Protocol Group Policy Template]]</font> <font size="3">[https://www.moonlightdesign.org/dirlist DirList] [[CompactOnDelete]]</font> <font size="3">[[PortProxy]]</font> <font size="2">[[Serendipity|Team Serendipity]]</font> <font size="2">[[Disk Imager]]</font> <font size="1">[[ScreenWindowX]]</font> |} <small>[https://www.moonlightdesign.org/wireless/ Guest wireless network sign-up] (local network only)</small> |} 37f95d79557a2ec7e730dd177a8f6913296bb6b9 2285 2284 2015-06-06T15:04:53Z Stevenlawrance 1 wikitext text/x-wiki {| |valign="top"| Welcome to Moonlight Design -- the personal web site of [[Henry Lamb]] and [[Steven Lawrance]] ==Henry Lamb== [[Henry Lamb]] is a professional [http://en.wikipedia.org/wiki/Restaurant restaurateur] trained in both [http://www.baychef.com/programs/hospitality_and_restaurant.asp restaurant management] and [http://www.baychef.com/programs/culinary_arts.asp culinary arts] at the [http://www.baychef.com/ California Culinary Academy]. For a few years from the late 1990s to the early 2000s, Henry was a [http://en.wikipedia.org/wiki/Graphic_designer graphic designer] trained at the [http://www.artinstitutes.edu/sanfrancisco/ Art Institute of San Francisco] and the [http://www.academyart.edu/ Academy of Art University] Visit Henry's new wine site: [http://glassofgrape.com/ Glass of Grape] ==Steven Lawrance== [[Steven Lawrance]] is an active practitioner of [http://en.wikipedia.org/wiki/Software_engineering software engineering] and [http://en.wikipedia.org/wiki/Open-source_software open-source software enthusiast] trained in [http://www.mse.cs.cmu.edu/ software engineering] at [http://www.mse.cs.cmu.edu/ Carnegie Mellon University] and [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ business administration] with [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems computer information systems] at [http://www.bryant.edu/ Bryant University] [[Steven Lawrance#Software Project Experience|Check out the list of software that Steven has either written or contributed to]] |valign="top" width="25%"| {|border="1" | <font size="5">[https://www.moonlightdesign.org/urllock/ IE URL Lock]</font> <font size="5">[https://gnucashtoqif.us/ GnuCashToQIF]</font> <font size="4">[[TLS-SSL-Protocols|TLS/SSL Protocol Group Policy Template]]</font> <font size="3">[https://www.moonlightdesign.org/dirlist DirList] [[CompactOnDelete]]</font> <font size="3">[[PortProxy]]</font> <font size="2">[[Serendipity|Team Serendipity]]</font> <font size="2">[[Disk Imager]]</font> <font size="1">[[ScreenWindowX]]</font> <font size="1">[https://www.moonlightdesign.org/kjmouse/ KJMouse]</font> <font size="1">[https://www.moonlightdesign.org/pam-cuecat/ PAM-CueCat]</font> |} <small>[https://www.moonlightdesign.org/wireless/ Guest wireless network sign-up] (local network only)</small> |} 540c994ffef852e71e96ea709e81bbe6f442ecb6 2286 2285 2015-06-06T15:11:15Z Stevenlawrance 1 wikitext text/x-wiki {| |valign="top"| Welcome to Moonlight Design -- the personal web site of [[Henry Lamb]] and [[Steven Lawrance]] ==Henry Lamb== [[Henry Lamb]] is a professional [http://en.wikipedia.org/wiki/Restaurant restaurateur] trained in both [http://www.baychef.com/programs/hospitality_and_restaurant.asp restaurant management] and [http://www.baychef.com/programs/culinary_arts.asp culinary arts] at the [http://www.baychef.com/ California Culinary Academy]. For a few years from the late 1990s to the early 2000s, Henry was a [http://en.wikipedia.org/wiki/Graphic_designer graphic designer] trained at the [http://www.artinstitutes.edu/sanfrancisco/ Art Institute of San Francisco] and the [http://www.academyart.edu/ Academy of Art University] Visit Henry's new wine site: [http://glassofgrape.com/ Glass of Grape] ==Steven Lawrance== [[Steven Lawrance]] is an active practitioner of [http://en.wikipedia.org/wiki/Software_engineering software engineering] and [http://en.wikipedia.org/wiki/Open-source_software open-source software enthusiast] trained in [http://www.mse.cs.cmu.edu/ software engineering] at [http://www.mse.cs.cmu.edu/ Carnegie Mellon University] and [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ business administration] with [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems computer information systems] at [http://www.bryant.edu/ Bryant University] [[Steven Lawrance#Software Project Experience|Check out the list of software that Steven has either written or contributed to]] |valign="top" width="25%"| {|border="1" | <font size="5">[https://www.moonlightdesign.org/urllock/ IE URL Lock]</font> <font size="5">[https://gnucashtoqif.us/ GnuCashToQIF]</font> <font size="4">[[TLS-SSL-Protocols|TLS/SSL Protocol Group Policy Template]]</font> <font size="3">[https://www.moonlightdesign.org/dirlist DirList] [[CompactOnDelete]]</font> <font size="3">[[PortProxy]]</font> <font size="2">[[Serendipity|Team Serendipity]]</font> <font size="2">[[Disk Imager]]</font> <font size="1">[[ScreenWindowX]]</font> <font size="1">[https://www.moonlightdesign.org/kjmouse/ KJMouse]</font> |} <small>[https://www.moonlightdesign.org/wireless/ Guest wireless network sign-up] (local network only)</small> |} 39fab0347050b469fda2ffbb6a0edc0964ee26f3 2289 2286 2017-12-03T20:25:03Z Stevenlawrance 1 wikitext text/x-wiki {| |valign="top"| Welcome to Moonlight Design -- the personal web site of [[Henry Lamb]] and [[Steven Lawrance]] ==Henry Lamb== [[Henry Lamb]] is a psychology masters student at [https://www.ggu.edu Golden Gate University]. ==Steven Lawrance== [[Steven Lawrance]] is a [https://en.wikipedia.org/wiki/Software_engineering software engineer] and [https://en.wikipedia.org/wiki/Open-source_software open-source software enthusiast] trained at [http://www.mse.cs.cmu.edu/ Carnegie Mellon University] and business administration at [https://www.bryant.edu/ Bryant University] [[Steven Lawrance#Software Project Experience|View the list of software that Steven has either written or contributed to]] |valign="top" width="25%"| {|border="1" | <font size="5">[https://www.moonlightdesign.org/urllock/ IE URL Lock]</font> <font size="5">[https://gnucashtoqif.us/ GnuCashToQIF]</font> <font size="4">[[TLS-SSL-Protocols|TLS/SSL Protocol Group Policy Template]]</font> <font size="3">[https://www.moonlightdesign.org/dirlist DirList] [[CompactOnDelete]]</font> <font size="3">[[PortProxy]]</font> <font size="2">[[Serendipity|Team Serendipity]]</font> <font size="2">[[Disk Imager]]</font> <font size="1">[[ScreenWindowX]]</font> <font size="1">[https://www.moonlightdesign.org/kjmouse/ KJMouse]</font> |} <small>[https://www.moonlightdesign.org/wireless/ Guest wireless network sign-up] (local network only)</small> |} 101740e12d75e45c3bb8cb4c9c40b4f81468ad14 Steven Lawrance 0 1409 2283 2240 2015-06-06T14:01:44Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Team software|Software Built in a Team]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software that I created|Software Built by Just Me]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Network:''' [http://www.linkedin.com/in/meowmeow LinkedIn] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.salesforce.com/ Salesforce.com]||Web-based business software platform and suite of integrated business applications. During my time at Salesforce.com, I have worked on several teams -- API, Force.com Sites, Site.com, and Platform Security. Most recently, I led the implementation of custom https domains for Salesforce's site technologies, and this included tangential work, such as the domain management screens that were added in Summer '14. I've been a go-to person for several parts of the platform, and this includes Force.com Sites, the database tier of Site.com, site publishing, custom https domains, clickjack protection, inbound and outbound https connections, the reverse proxy caching layer for sites, IPv6, and our main production feature testing tool.<br><br>At Salesforce.com's Dreamforce 2013 conference, I presented a [http://www.youtube.com/watch?v=Z7L1pSfcCJc session on the lessons learned while developing a Force.com solution] to replace an older Microsoft Access solution for the San Francisco AIDS Foundation.<br><br>Earlier at Salesforce.com, I integrated the low-level parts of Siteforce into the core Salesforce.com product; wrote Siteforce's Resin and runtime server configurations; wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests; improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization; and added per-window screenshots to an internal testing tool by extending Selenium with JNI native code.||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:Selenium}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Jetty}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}||large||2007-current |- |[[Reggie/CIS]]||A 200-user multi-tenant three-tiered HIV/AIDS client database system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used.||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Donor and fundraising event management system used by the San Francisco AIDS Foundation. I migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization. In this project, I integrated a Windows-based three-dimensional visualization program into an Eclipse view, kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project, and automated our data collection and reporting processes to minimize project overhead work. This group project involved four other students -- two whom also work at Salesforce.com -- and served as a laboratory for us to directly apply coursework to a software project with a real client throughout our software engineering masters' programs.||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project.||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features.||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||Intranet system for Ariesnet, Inc. During the Summer of 1999, I helped shape the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments.||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind.||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,607||2005-2012 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface.||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel.||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[https://gnucashtoqif.us/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF or an IIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system.||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server.||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list].||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS].||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[http://pam-cuecat.sourceforge.net/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction.||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||Web site for the [http://web.bryant.edu/~pride/ Bryant PRIDE] LGBT group. In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced the web site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}.||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface.||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context.||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95].||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[http://kjmouse.sourceforge.net/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI].||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete.||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own.||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities.||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished.||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list].||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant.||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon significantly. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: [http://developer.force.com/sites Force.com Sites], Core Infrastructure, Security, and [http://wiki.developerforce.com/index.php/Web_Services_API API] Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure. A security research firm later commended Salesforce.com's security, saying that they couldn't find any XSS or cross site request forgery (CSRF) vulnerabilities, despite looking for them over the course of several days. **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming a go-to person for HTTPS and SSL **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls], which helped quickly bring that feature to market with confidence in its quality and security **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface of, added Apache Ant build files to, significantly improved the configuration system of, and added multiple-window browser screenshots to an internal production testing tool that is used by multiple teams **Created and automated anti-phishing and security test scenarios **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support. **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based [[PDF Access Reports|PDF reports]] using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager and, via rotation, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame. **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error. **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project. *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 08699e36352afc2725601c259920ddbda63a1de5 2287 2283 2015-06-06T15:12:09Z Stevenlawrance 1 /* Software that I created */ wikitext text/x-wiki __NOTOC__ Welcome to the web site of '''Steven Lawrance''', [http://www.mse.cs.cmu.edu/ master of software engineering (MSE)]. I enjoy building complete computing solutions at all levels of abstraction to automate business processes at a low cost, in a short time frame, and with high quality. Put my experience, interests, training, and expertise to work for you. Please feel free to [mailto:steven@moonlightdesign.org contact me today]. <div align="center"> <table style="text-align: left;" border="0" cellpadding="1" cellspacing="5"> <tr> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Team software|Software Built in a Team]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Software that I created|Software Built by Just Me]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Employment History|Employment History]]</big></td> <td style="background-color: rgb(240, 240, 240); border: 2px solid rgb(90, 90, 90); padding: 3px;"><big>[[Steven Lawrance#Education and Training|Education and Training]]</big></td> </tr> </table> </div> '''Résumé:''' [https://www.moonlightdesign.org/steve/resume.pdf Portable document format (PDF)] '''Network:''' [http://www.linkedin.com/in/meowmeow LinkedIn] Please feel free to ask me for more information about any project listed on this page. ==Software Project Experience== ===Team software=== I materially participated in the team software projects listed below: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.salesforce.com/ Salesforce.com]||Web-based business software platform and suite of integrated business applications. During my time at Salesforce.com, I have worked on several teams -- API, Force.com Sites, Site.com, and Platform Security. Most recently, I led the implementation of custom https domains for Salesforce's site technologies, and this included tangential work, such as the domain management screens that were added in Summer '14. I've been a go-to person for several parts of the platform, and this includes Force.com Sites, the database tier of Site.com, site publishing, custom https domains, clickjack protection, inbound and outbound https connections, the reverse proxy caching layer for sites, IPv6, and our main production feature testing tool.<br><br>At Salesforce.com's Dreamforce 2013 conference, I presented a [http://www.youtube.com/watch?v=Z7L1pSfcCJc session on the lessons learned while developing a Force.com solution] to replace an older Microsoft Access solution for the San Francisco AIDS Foundation.<br><br>Earlier at Salesforce.com, I integrated the low-level parts of Siteforce into the core Salesforce.com product; wrote Siteforce's Resin and runtime server configurations; wrote a [http://en.wikipedia.org/wiki/Cross-site_scripting cross site scripting] [http://en.wikipedia.org/wiki/Mozilla_Firefox Firefox]/[http://en.wikipedia.org/wiki/Firebug_(Firefox_extension) Firebug] extension to test proper output escaping in the manual and automated tests; improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization; and added per-window screenshots to an internal testing tool by extending Selenium with JNI native code.||{{Tech:Java}}, {{Tech:Ant}}, {{Tech:Selenium}}, {{Tech:JUnit}}, {{Tech:Salesforce.com}}, {{Tech:Jetty}}, {{Tech:Resin}}, {{Tech:JSP}}, {{Tech:Servlet}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}||large||2007-current |- |[[Reggie/CIS]]||A 200-user multi-tenant three-tiered HIV/AIDS client database system that was used by all Ryan White Foundation CARE-funded AIDS service organizations in San Francisco in collaboration with the [http://www.sfdph.org/ San Francisco Department of Public Health (DPH)] [http://www.sfdph.org/PHP/HIVHlthSvc.htm AIDS Office] and two partners to the [http://www.sfaf.org/ San Francisco AIDS Foundation (SFAF)], where I worked for about five years. I actively maintained this system with a colleague at the DPH AIDS Office and was principally responsible for maintaining the "CIS" portion of Reggie/CIS, which extended the Reggie platform with extra features that the SFAF and two other organizations used.||{{Tech:Java}}, {{Tech:VBScript}}, {{Tech:Swing}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:CVS}}, {{Tech:JavaScript}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:CORBA}}, {{Tech:IIS}}, {{Tech:COM}}, {{Tech:Win32}}||162,005||2000-2005 |- |[[DonorPerfect Online]]||Donor and fundraising event management system used by the San Francisco AIDS Foundation. I migrated [http://www.aidslifecycle.org/index.html AIDS/LifeCycle] data from a [http://www.goldmine.com/micro.aspx?id=4398 Goldmine] database to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] customized [http://www.donorperfect.com/ DonorPerfect Online] system using a [http://en.wikipedia.org/wiki/Test_driven_development test-driven development process] for the SQL scripts. I also contributed substantially to the bulk data entry wizard, fixed bugs throughout the system, including security holes, made all pages and [http://en.wikipedia.org/wiki/Javascript JavaScripts] operate properly in [http://en.wikipedia.org/wiki/Firefox Mozilla Firefox], and implemented strict URL filtering security using an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||97,592||2004-2005 |- |[[SFAF CRM]]||Customer relationship management system that was implemented by a colleague at the [http://www.sfaf.org/ San Francisco AIDS Foundation] that primarily serves the organization's [http://www.sfaf.org/volunteer/ volunteer based programs department], automates expense reports, and runs the [http://www.aidshotline.org/ California AIDS Hotline]. I enhanced the deployment system using [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] in a web-based front-end, helped my colleague fix various bugs, and enhanced its Internet-facing security with an [http://httpd.apache.org/ Apache] [http://en.wikipedia.org/wiki/Reverse_proxy reverse-proxy] and [http://en.wikipedia.org/wiki/Mod_rewrite mod_rewrite].||{{Tech:VBScript}}, {{Tech:T-SQL}}, {{Tech:MS SQL Server}}, {{Tech:JavaScript}}, {{Tech:Apache}}, {{Tech:IIS}}, {{Tech:CVS}}||69,015||2001-2005 |- |[[Serendipity|Bosch Security Configuration Assistant]]||An Eclipse-based application that generates three-dimensional security plans for buildings using a rule engine and three-dimensional visualization. In this project, I integrated a Windows-based three-dimensional visualization program into an Eclipse view, kept our RedHat Fedora Core server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project, and automated our data collection and reporting processes to minimize project overhead work. This group project involved four other students -- two whom also work at Salesforce.com -- and served as a laboratory for us to directly apply coursework to a software project with a real client throughout our software engineering masters' programs.||{{Tech:Java}}, {{Tech:Eclipse}}, {{Tech:UML}}, {{Tech:Ant}}, {{Tech:Bugzilla}}, {{Tech:CruiseControl}}, {{Tech:MediaWiki}}, {{Tech:Subversion}}, {{Tech:SWT}}, {{Tech:C++}}, {{Tech:JNI}}, {{Tech:Win32}}||21,274||2005-2006 |- |[[Park 'N Park]]||A fault-tolerant, distributed, real-time three-tiered application for tracking parking garage usage. This was an academic project.||{{Tech:Java}}, {{Tech:CORBA}}, {{Tech:MySQL}}, {{Tech:CVS}}||2,027||2006 |- |[[Teacher's Pet]]||Shares a tab in your Mozilla Firefox browser with one or more remote browsers, which can be useful in virtual classroom environments||{{Tech:JavaScript}}, {{Tech:Java}}, {{Tech:XUL}}, {{Tech:XPCOM}}, {{Tech:Subversion}}||1,251||2006 |- |[[Hulk]]||Physically navigates a maze using a customized {{Tech:Boe-Bot}}. This project involved both custom hardware and custom software as well as trade-offs between the two when implementing features.||{{Tech:BASIC Stamp}}, {{Tech:Boe-Bot}}, {{Tech:Subversion}}||784||2006 |- |[https://www.moonlightdesign.org/urllock/Configuration_editor URL Lock]||Follow-up project to [http://www.moonlightdesign.org/urllock/ IE URL Lock] that sports a configuration user interface and implements new ideas for visually disabling content on the web||{{Tech:JavaScript}}, {{Tech:XUL}}, {{Tech:C++}}, {{Tech:XPCOM}}, {{Tech:Win32}}, {{Tech:Subversion}}||3,868||2006 |- |[[Ariesbase]]||Intranet system for Ariesnet, Inc. During the Summer of 1999, I helped shape the back-end functionality, such as the security system and global includes, and I also created a high-level specification for an employee rating system for virtual team environments.||{{Tech:PHP}}, {{Tech:MySQL}}, {{Tech:JavaScript}}, {{Tech:CVS}}||medium||1999-2000 |} <br> ===Software that I created=== I wrote and maintain the following software: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[[Home Profiler]]||Synchronizes user profile data between multiple desktop computers, regardless of the operating system. This was used at the [http://www.sfaf.org/ San Francisco AIDS Foundation] to migrate user profile data from Windows NT to Windows XP while leaving malware and spyware behind.||{{Tech:Java}}, {{Tech:C}}, {{Tech:JNI}}, {{Tech:JACOB}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:CVS}}||5,679||2005 |- |[https://www.moonlightdesign.org/urllock/ IE URL Lock]||A browser helper object (BHO) that prevents users from navigating to web sites in Internet Explorer and Windows Explorer while permitting URLs that match a Perl-compatible regular expression stored in the registry||{{Tech:C++}}, {{Tech:COM}}, {{Tech:BHO}}, {{Tech:Win32}}, {{Tech:Subversion}}||1,607||2005-2012 |- |[[Backup system]]||Multi-platform, SSH-secured, Internet-based incremental backup system that I assembled and use to back up all computers that I manage||{{Tech:Unison}}, {{Tech:Apache}}, {{Tech:OpenSSH}}|| ||2005-2007 |- |[[Read-only filesystem]]|||FUSE filesystem view that makes all files unconditionally read-only. I use this in my [[Backup system|backup system]] for the web-based file restore interface.||{{Tech:C}}, {{Tech:Fuse}}||241||2005-2007 |- |[[Serendipity Time Tracking Tool]]||A two-tier software team time tracking tool used by [[Serendipity|Team Serendipity]] while designing and building the [[Serendipity|Bosch Security Configuration Assistant]]. It was rapidly developed using Microsoft Access 2003 as the front-end user interface, MySQL 5 as the back-end database, and SSH as the MySQL connection tunnel.||{{Tech:VBA}}, {{Tech:Microsoft Access}}, {{Tech:MySQL}}, {{Tech:OpenSSH}}||small||2006 |- |[https://gnucashtoqif.us/ GnuCash to QIF]||Converts a GnuCash XML file into a QIF or an IIF file||{{Tech:Java}}, {{Tech:Xerces}}||2,274||2002-2007 |- |[[PDF Access Reports]]||Web-based PDF reports using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server. This was a component of [[Reggie/CIS|Reggie/CIS's]] reporting system.||{{Tech:PHP}}, {{Tech:COM}}, {{Tech:C++}}, {{Tech:Sockets}}, {{Tech:VBA}}, {{Tech:ASP}}, {{Tech:Access}}||651||2002-2005 |- |[[PDFFile and InvokeAsUser]]||Enables easy portable document format (PDF) file generation on Windows computers when used with AFPL GhostScript and RedMon||{{Tech:C}}, {{Tech:Win32}}||396||2005 |- |[[SFAF VPN Client]]||Connects a [http://en.wikipedia.org/wiki/Microsoft_windows Microsoft Windows] 2000 or XP computer to the [http://www.sfaf.org/ San Francisco AIDS Foundation's] [http://en.wikipedia.org/wiki/Vpn virtual private network (VPN)] by using the built-in [http://en.wikipedia.org/wiki/Ipsec IPsec] and [http://en.wikipedia.org/wiki/Pptp PPTP] capabilities in Windows. Each client computer is secured with a machine-unique [http://en.wikipedia.org/wiki/Public-key_cryptography public/private key], and users are authenticated against the [http://en.wikipedia.org/wiki/Windows_Server_domain NT domain] using PPTP over the IPsec connection.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Java}}, {{Tech:Swing}}, {{Tech:CVS}}||2,623||2003-2005 |- |[https://www.moonlightdesign.org/thunderforce/shared/Door%20lock%20example/ Door Lock]||Specification (not an implementation) of a secure residential door real-time, embedded software system that uses electronic locks, secure entry, easy exiting, and alarm state awareness to securely and efficiently manage a door||{{Tech:Javelin}}||0||2006 |- |[https://www.moonlightdesign.org/steve/SpellChecker.pdf Swing Inline Spell Checker]||Inline spell checker that plugs into Swing's look-and-feel system. This was used in [[Reggie/CIS]] as its distributed spell checker with [http://aspell.net/ GNU Aspell] running on the server.||{{Tech:Java}}, {{Tech:Swing}}, {{Tech:CORBA}}, {{Tech:Aspell}}||2,859||2002-2005 |- |[https://www.moonlightdesign.org/dirlist/ DirList]||User directory system that runs as a CGI to serve up user lists, search, and synchronize with the operating system's user database. When used with [http://www.moonlightdesign.org/dirlist DirList2ODBC], the ODBC driver that I wrote for DirList2, the entire DirList2 system becomes a [http://en.wikipedia.org/wiki/Sql structured query language (SQL)]-compliant database system within the limits of the [https://www.moonlightdesign.org/dirlist/doc/server/ DirList2 Server]. This project began in January of 1998 and is actively patched for any security issues that arise. [http://www.bryant.edu/ Bryant University] continues to use this program for their [http://web.bryant.edu/forhelp/pointer.html student web site list].||{{Tech:C++}}, {{Tech:C}}, {{Tech:Sockets}}, {{Tech:ODBC}}, {{Tech:Linux}}, {{Tech:Win32}}, {{Tech:VBA}}, {{Tech:Access}}||8,268||1999-2007 |- |[https://www.moonlightdesign.org/dirlist/ DirList2ODBC]||[http://en.wikipedia.org/wiki/Odbc ODBC] 2.0 compliant driver written for the [https://www.moonlightdesign.org/dirlist/ DirList] server. This driver is primarily used with [http://en.wikipedia.org/wiki/Microsoft_access Microsoft Access], but can also be used from other ODBC client applications, such as [http://en.wikipedia.org/wiki/Spss SPSS].||{{Tech:C++}}, {{Tech:Win32}}, {{Tech:Sockets}}, {{Tech:ODBC}}||12,671||1999-2000 |- |[https://www.moonlightdesign.org/pam-cuecat/ PAM CueCat Module]||Turns the CueCat barcode scanner into a pluggable authentication module (PAM) library, permitting logins with bar code scans||{{Tech:C}}, {{Tech:PAM}}, {{Tech:Linux}}, {{Tech:CueCat}}||285||2000 |- |[[Home Control]]||The project that marked my first significant work towards complete home and office automation systems||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Serial}}, {{Tech:CP290}}||2,270||1996,1998 |- |[[ResNet Online]]||I rewrote the old site for ease of use with more capabilities. Automatic port registration and heavy database integration saved the ResNet program a substantial amount of time while greatly improving customer/student satisfaction.||{{Tech:PHP}}, {{Tech:SNMP}}, {{Tech:MySQL}}, {{Tech:PHPLib}}||4,572||1999-2001 |- |[[FAT Recover]]||Manual FAT filesystem recovery tool that I made to help with manual floppy disk recoveries and to salvage my dad's laptop when Windows totally crashed||{{Tech:C}}, {{Tech:Linux}}||246||2000 |- |[[Bryant PRIDE web site]]||Web site for the [http://web.bryant.edu/~pride/ Bryant PRIDE] LGBT group. In the Fall of 1997, when I was a freshman at [http://www.bryant.edu/ Bryant University], I greatly enhanced the web site with several pages and JavaScripts. This also included a JavaScript-driven background {{Tech:MIDI}} music jukebox in a [http://en.wikipedia.org/wiki/Pop-under pop-under], which was unique for a web site at that time. While I was the web site's maintainer, it moved from static {{Tech:HTML}} to {{Tech:ASP}} and then to {{Tech:PHP}}.||{{Tech:JavaScript}}, {{Tech:PHP}}, {{Tech:VBScript}}, {{Tech:ASP}}||3,681||1997-2000 |- |[[ActiveMail]]||Provides SMTP email sending, POP3 email downloading, and FTP authentication services to {{Tech:ASP}}, {{Tech:VisualBasic}}, and other {{Tech:COM}}-consuming programs||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:VisualBasic}}||4,691||1998-2000 |- |[[CPU ID]]||A very simple program that displays information about the CPU that it happens to execute on||{{Tech:C}}, {{Tech:x86 Assembler}}, {{Tech:Win32}}||111||1999 |- |[[Disk Imager]]||Reads, writes, verifies, and erases entire disks into/from [http://en.wikipedia.org/wiki/Disk_image raw image files]. This is similar in principle to [http://www.tux.org/pub/dos/rawrite/ rawrite.exe], but Disk Imager implements a graphical user interface.||{{Tech:C}}, {{Tech:Win32}}||520||1998 |- |[[EzMIDI32]]||A 32-bit version of the ScreenWindow+EasyMIDI libraries that I wrote for Grapevine High School||{{Tech:C++}}, {{Tech:Win32}}||854||1998 |- |[[LPD]]||Written for the [http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District (GCISD)] to allow employees to send [http://en.wikipedia.org/wiki/AS/400 AS/400] printouts to their local Windows printers. I wrote the piece that translates HP DeskJet 500 compatible instructions into a Windows GDI context.||{{Tech:C}}, {{Tech:Win32}}||1,850||1996-1998 |- |[[PortProxy]]||[http://en.wikipedia.org/wiki/Transmission_Control_Protocol TCP] connection forwarding [http://en.wikipedia.org/wiki/Windows_service service] that I wrote in college so that I could run servers from behind a firewall. When I put Linux onto resnet.bryant.edu, I no longer needed this program, but it's still cool if you are running [http://en.wikipedia.org/wiki/Microsoft_Windows Windows]. I also wrote a version that runs as a [http://en.wikipedia.org/wiki/System_tray system tray] application in [http://en.wikipedia.org/wiki/Windows_95 Windows 95].||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Sockets}}||1,461||1999 |- |[[ScreenWindowX]]||An {{Tech:ActiveX}} version of [[ScreenWindow]] that I created during the ActiveX hype. This gives [http://en.wikipedia.org/wiki/Internet_Explorer Internet Explorer] pages, [http://en.wikipedia.org/wiki/Component_Object_Model COM] clients, and [http://en.wikipedia.org/wiki/.NET_Framework .NET] applications an easy-to-use text console user interface control.||{{Tech:C++}}, {{Tech:COM}}, {{Tech:Win32}}, {{Tech:ActiveX}}||1,614||1998 |- |[https://www.moonlightdesign.org/kjmouse/ KJMouse]||Busy cursor for {{Tech:Java}} that is similar to the launch feedback in [http://en.wikipedia.org/wiki/KDE KDE] 2.2||{{Tech:Java}}, {{Tech:JNI}}, {{Tech:Win32}}, {{Tech:X11}}, {{Tech:Cocoa}}||736||2001-2004 |- |[[CatSetup]]||Scriptable install and uninstall utility for [http://en.wikipedia.org/wiki/Windows_3.1 16-bit Windows] that I wrote in the mid-1990s to ease the distribution of my software. Most of my software from 1994 to 2000 used CatSetup. I eventually switched to using [http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System NSIS] and, later, [http://dennisbareis.com/makemsi.htm MAKEMSI].||{{Tech:C}}, {{Tech:Win16}}||3,676||1994-1998 |- |[[Trig Grapher]]||Plots [http://en.wikipedia.org/wiki/Trigonometry trigonometric functions] in a window. This was my first [http://en.wikipedia.org/wiki/Thread_%28computer_science%29 multi-threaded] {{Tech:Win32}} program, which I wrote in high school for fun. I later back-ported it to {{Tech:Win16}}.||{{Tech:C}}, {{Tech:Win32}}, {{Tech:Win16}}||1,441||1995-1996 |- |[[256-Color SDK]]||Library that I wrote a to easily manage 256-color bitmaps on 256-color displays||{{Tech:C}}, {{Tech:Win16}}||704||1994 |- |[[AudioCD Pictures]]||Displays predefined pictures as a playing CD reaches predefined moments||{{Tech:C}}, {{Tech:Win16}}||550||1994 |- |[[BBS Ads]]||Simply a program that can advertise bulletin board systems, when they used to be popular||{{Tech:C}}, {{Tech:Win16}}||258||1993-1994 |- |[[Bids-to-ASP]]||Converts American Airlines bidsheet files into Procomm Plus for DOS ASPect scripts||{{Tech:C}}, {{Tech:Win16}}||562||1994 |- |[[Horses]]||A fun horse racing strategy game for Windows||{{Tech:C}}, {{Tech:Win16}}||3,348||1995,1997 |- |[[KittyCat! Comm]]||[http://en.wikipedia.org/wiki/Bulletin_board_system Bulletin board system (BBS)] communications program with a [http://en.wikipedia.org/wiki/Dynamic_Data_Exchange dynamic data exchange (DDE)] based [http://en.wikipedia.org/wiki/Application_programming_interface application programming interface (API)] and support for [http://en.wikipedia.org/wiki/ANSI_escape_code ANSI text] and [http://en.wikipedia.org/wiki/Remote_imaging_protocol RIPscrip graphics]. This was never finished due to the Internet and the World Wide Web making it obsolete.||{{Tech:C}}, {{Tech:Win16}}||8,166||1994-1995 |- |[[MCI SendString]]||Allows users to work with the [http://en.wikipedia.org/wiki/Media_Control_Interface Microsoft Windows media control interface (MCI)] with text rather than through pointing and clicking||{{Tech:C}}, {{Tech:Win16}}||212||1994 |- |[[MeowyMIDI]]||A [http://en.wikipedia.org/wiki/SoundFont 1.0 sound font] with cat meows and purrs for [http://en.wikipedia.org/wiki/Sound_Blaster Sound Blaster] AWE32 and AWE64 audio cards||{{Tech:SoundFont}}, {{Tech:MIDI}}||0||1994-1995 |- |[[PCL Page]]||Manipulate [http://en.wikipedia.org/wiki/Printer_Command_Language PCL]-compliant printers with this utility that works in both {{Tech:Win16}} and {{Tech:DOS}}||{{Tech:C}}, {{Tech:Win16}}, {{Tech:DOS}}||196||1995 |- |[[ScreenWindow]]||Text console and {{Tech:MIDI}} library for {{Tech:Win16}} that I wrote so that students at [http://www.gcisd-ghs.org/ Grapevine High School] in first-year computer science class could use MIDI in their music projects using [http://en.wikipedia.org/wiki/Turbo_Pascal Borland's Turbo Pascal]. When they switched to teaching {{Tech:C++}}, I made a 32-bit version of the library that used {{Tech:Win32}}'s native console rather than my own.||{{Tech:C++}}, {{Tech:C}}, {{Tech:Pascal}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||2,953||1996-1997 |- |[[AriesType]]||A [http://en.wikipedia.org/wiki/Touch_typing touch typing] education program that I made while I was a freshman in high school. It tied into the local [http://en.wikipedia.org/wiki/Novell_Netware Novell NetWare] network to be a multi-user application with different capabilities given to students, teachers, and system operators. AriesType also included basic local email and paging capabilities.||{{Tech:BASIC}}, {{Tech:DOS}}||4,364||1993-1994 |- |[[IntMap]]||A small image library that I wrote for a Pascal project in high school to provide image drawing, movement, and rotation operations in DOS||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}||1,797||1995,1998 |- |[[Jingle Bells]]||A first-year computer science course project to visually and audibly play a [http://en.wikipedia.org/wiki/Christmas_song traditional December holiday song], which I later ported to Windows using [[ScreenWindow]]||{{Tech:Pascal}}, {{Tech:DOS}}, {{Tech:C}}, {{Tech:Win16}}, {{Tech:Win32}}, {{Tech:MIDI}}||611||1994,1996 |- |[[SLOS-DOS]]||A small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:BASIC}}, {{Tech:DOS}}||1,277||1993 |- |[[SLOS-Win]]||Windows version of [[SLOS-DOS|SLOS]], a small interpreted toy operating environment written in BASIC for DOS. Programs are written in a trivial and limited scripting language.||{{Tech:C++}}, {{Tech:Win16}}||1,679||1993 |- |[[TSNHead]]||Kept track of how much time my brothers and I spent on [http://en.wikipedia.org/wiki/The_Sierra_Network The Sierra Network (TSN)]||{{Tech:BASIC}}, {{Tech:DOS}}||291||1992 |- |[[TrackTrek]]||A track meet program that "keeps track" of events and allows others to view scores in realtime. This was my first {{Tech:Java}} program. This was more of a self-driven academic exercise as the project was never finished.||{{Tech:Java}}, {{Tech:AWT}}||3,690||1996-1998 |- |[https://www.moonlightdesign.org/thunderforce/ Thunderforce]||An open-source Mozilla Thunderbird extension for Salesforce.com. This project is now abandoned due to other priorities and interests.||{{Tech:JavaScript}}, {{Tech:XPCOM}}, {{Tech:C++}}, {{Tech:XUL}}, {{Tech:Subversion}}, {{Tech:MediaWiki}}||5,411||2007-2009 |} <br> ===Software and project contributions=== I contributed to the following projects: {|class="software sortable" !Name !Description !Technologies !SLOC !Year |- |[http://www.mozilla.org/ Mozilla]||[https://www.moonlightdesign.org/startfirefox/ Workaround code] for a shutdown bug in Firefox ([https://bugzilla.mozilla.org/show_bug.cgi?id=239223 bug 239223]) and helped others find the cause of a [https://bugzilla.mozilla.org/show_bug.cgi?id=245742 NTLM authentication crash] in a pre-Firefox build|| ||156||2005 |- |[http://www.samba.org/ Samba]||[https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134570 Patch] to allow the use of 32-bit user and group IDs in smbmnt|| ||11||2004 |- |[http://pan.rebelbase.com/ Pan]||Contributed a small multi-threaded bugfix to a function that was crashing on several important dialog boxes in version 0.6.3|| ||small||1999 |- |[http://www.php.net/ PHP]||Contributed the [http://us.php.net/snmpset snmpset()] function to [http://cvs.php.net/viewvc.cgi/php3/functions/?pathrev=php_3_0_12 PHP 3.0.12] and [http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/?pathrev=php_4_0b2-2 PHP4 Beta2] so that [[ResNet Online]] could turn on the ResHall ports when students registered their computers||{{Tech:C}}, {{Tech:Net-SNMP}}, {{Tech:CVS}}||172||1999 |- |[http://spruce.sourceforge.net/ Spruce]||Contributed several small usability patches and a fix for a thread-based crash that brought down Spruce while checking messages in previous versions||{{Tech:C}}, {{Tech:GLib}} threads, {{Tech:GTK+}}||200||2000 |- |[http://www.opensuse.org/ Novell openSUSE]||Fixed bugs related to [https://bugzilla.novell.com/show_bug.cgi?id=343891 LVM on a USB boot drive] and [https://bugzilla.novell.com/show_bug.cgi?id=410736 J-Pilot thinking that the username is always wrong on 64-bit platforms], and added a [https://bugzilla.novell.com/show_bug.cgi?id=328116 workaround for Bluetooth DUND issues]. [https://bugzilla.novell.com/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&long_desc_type=fulltext&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=anywords&keywords=&emailassigned_to1=1&emailreporter1=1&emailinfoprovider1=1&emailcc1=1&emaillongdesc1=1&emailtype1=exact&email1=novell%40moonlightdesign.org&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Full bug list].||{{Tech:C}}||small||2007-2008 |- |[http://www.bryant.edu/ Bryant University]||During the Spring of 1998, I enhanced Bryant's main page with rollovers and images. Other miscellaneous pages were also updated, and the [http://www.moonlightdesign.org/dirlist/ DirList] project was started originally as a web directory for Bryant.||{{Tech:JavaScript}}, {{Tech:HTML}}||small||1998-1999 |} <br> Lines of code were computed using [http://www.dwheeler.com/sloccount/ SLOCCount] and, for extensions not supported by SLOCCount, <code>find . -iname \*\\.js -print0 -or -iname \*\\.bs2 -print0 -or -iname \*\\.idl -print0 -or -iname \*\\.asp -print0 -or -iname \*\\.clp -print0 -or -iname \*\\.xul -print0 -or -iname \*\\.bas -print0 -or -iname \*\\.exc -print0| xargs -0 -Ixxx cat xxx| grep "[a-zA-Z0-9]"|wc -l</code>. SLOC counts that relate to San Francisco AIDS Foundation software that has not been made open-source were computed during my final months of employment; Carnegie Mellon University asked for those numbers as part of the admission process. Generated code is excluded from the SLOC counts. With generated code, such as the [[Reggie/CIS]] code generated from [http://java.sun.com/j2se/1.4.2/docs/guide/rmi-iiop/toJavaPortableUG.html idlj], the SLOC counts balloon significantly. ==Employment History== ===[http://www.salesforce.com/ Salesforce.com]=== *'''Senior Member of the Technical Staff: [http://developer.force.com/sites Force.com Sites], Core Infrastructure, Security, and [http://wiki.developerforce.com/index.php/Web_Services_API API] Teams''' *January 2007 to present *'''Accomplishments''' **Brought attention to specific [http://en.wikipedia.org/wiki/Cross-site_scripting cross-site scripting (XSS)] vulnerabilities by writing a Firefox Firebug extension that looked for improper string escaping in a test org that had been specially populated with attack strings by another tool and having quality engineers from every functional team test the system with the Firebug extension running. This led to the identification and resolution of a large number of vulnerabilities, thus making Salesforce.com even more secure. A security research firm later commended Salesforce.com's security, saying that they couldn't find any XSS or cross site request forgery (CSRF) vulnerabilities, despite looking for them over the course of several days. **Championed an improvement to an anti-phishing feature's design successfully, and that improvement is patent-pending **Resolved customer cases related to the [http://wiki.apexdevnet.com/index.php/Web_Services_API application programming interface] (API) and [http://en.wikipedia.org/wiki/Secure_Sockets_Layer secure sockets layer] (SSL), quickly becoming a go-to person for HTTPS and SSL **Improved an internal production testing tool's scheduling of tests by adding prerequisite expressions to increase test parallelization **Built the initial security testing framework for [http://wiki.apexdevnet.com/index.php/Partner_Access_Controls package access controls], which helped quickly bring that feature to market with confidence in its quality and security **Designed and began to implement a Thunderbird add-on for Salesforce.com: [https://www.moonlightdesign.org/thunderforce Thunderforce] **Enhanced the user interface of, added Apache Ant build files to, significantly improved the configuration system of, and added multiple-window browser screenshots to an internal production testing tool that is used by multiple teams **Created and automated anti-phishing and security test scenarios **Automated HTTPS troubleshooting with an internal utility for support representatives that substantially reduced the number of escalated HTTPS cases **Ensured that new releases of the core product did not break older API versions through gold files and automated testing **Established a methodology for determining equivalence partition coverage in the test cases for the [http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql.htm Salesforce.com object query language (SOQL)] **Assisted developers and quality engineers with installing and maintaining [http://www.opensuse.org/ Novell openSUSE Linux] on their primary desktops ===[http://www.sfaf.org/ San Francisco AIDS Foundation]=== *'''Database Administrator and Software Engineer''' *September 2000 to July 2005 *'''Accomplishments''' **Maintained a [[Reggie/CIS|large 200-user multi-tenant three-tiered system]] used by all Ryan White CARE-funded AIDS service organizations in San Francisco in collaboration with the Department of Public Health AIDS Office of San Francisco and two direct partners. That involved all aspects of the software development lifecycle as well as server and client deployments, network maintenance, and top-tier user support. **Gathered requirements for new features collaboratively with stakeholders, designed those features, coded them, tested them, and deployed them **Assisted the other database administrator with the foundation's customized [[SFAF CRM|customer relationship management]] (CRM) and [[DonorPerfect Online|donor relationship management]] systems **Implemented large parts of the data conversion and customization of the Foundation's purchased donor relationship management system **Secured the Internet-facing presence of the donor relationship management system using a locked-down Apache configuration and strict URL regular expressions **Obviated a need for Crystal Reports by implementing web-based [[PDF Access Reports|PDF reports]] using Microsoft Access, a customized PHP build to run as a COM server, and a custom-built COM object for use by ASP on the reporting server, saving a significant amount of money **Migrated client operating system data during the Windows XP transition using a [[Home Profiler|multi-platform profile migration tool]] that I wrote **Planned, deployed, and provided training for Mozilla Firefox as the default web browser to all foundation users and created [https://www.moonlightdesign.org/urllock IE URL Lock] for business-related sites that only worked in Internet Explorer **Evaluated, purchased, and managed the licenses of software related to Reggie/CIS **Maintained the Cisco network equipment, including the PIX firewall's access control lists (ACLs) and routers' virtual local area network (VLAN) ACLs **Cut unsolicited commercial email (UCE or SPAM) drastically and added virtual private networking (VPN) using Astaro Secure Linux (ASL) in the demilitarized zone (DMZ) behing the Cisco PIX firewall **Administered databases, servers, and the organization's backup system ===[http://www.ariesnet.com/ Ariesnet]=== *'''Intranet Developer''' *May 1999 to August 1999 and May 2000 to July 2000 *'''Accomplishments''' **Developed specifications for a statistical employee rating system to help Ariesnet move towards building teams of virtual at−home employees **Helped Ariesnet build their secure intranet system using PHP and MySQL **Administered the intranet system's Linux server as well as the development test server using the CVS versioning software ===[http://www.bryant.edu/ Bryant University]=== *'''ResNet Consultant''' **January 1999 to May 2000 **'''Accomplishments''' ***Shortened residence hall computer registration port activation turnaround times from two weeks to one second with a [[ResNet Online|custom-written Linux-based PHP web site]] ***Provided in-person network and computer support to students living in the university's residence halls *'''Internet Developer''' **January 1998 to May 1998 and September 1998 to May 1999 **'''Accomplishments''' ***Implemented the university’s first web-based faculty and student directory using the common gateway interface (CGI) ***Wrote an ODBC driver and Microsoft Access database for its administration. This lives on as the [https://www.moonlightdesign.org/dirlist/ DirList2] open-source project ===[http://www.gcisd-k12.org/ Grapevine-Colleyville Independent School District]=== *'''Student Intern''' *January 1996 to August 1997 *'''Accomplishments''' **Provided hardware and software support, winning an employee award for exceptional service **Worked with wide-area network configurations **Wrote a [[LPD|networked printer driver]] to save thousands of dollars in licenses by allowing printing from their AS/400s to local printers ==Education and Training== ===[http://www.cmu.edu Carnegie Mellon University]=== *'''[http://www.mse.cs.cmu.edu/ Master of Software Engineering]''', [http://www.isri.cmu.edu/index.jsp Institute of Software Research] *[http://en.wikipedia.org/wiki/Pittsburgh%2C_Pennsylvania Pittsburgh, Pennsylvania] *'''Graduation:''' December 2006 *'''Masters group project:''' [[Serendipity|Bosch Security Configuration Assistant]], which is an [http://www.eclipse.org/ Eclipse-based] application that generates three-dimensional security plans for buildings using the [http://en.wikipedia.org/wiki/Jess_programming_language Jess] [http://en.wikipedia.org/wiki/Rule_engine rule engine] and three-dimensional visualization *'''Project roles:''' Technology support manager and, via rotation, planning manager, software process manager, project risk manager, and quality manager *'''Focus areas studied:''' Fault tolerant, distributed, real-time systems; software project management; formal models and analysis of software systems; software architecture; and software requirements elicitation methods *'''Accomplishments''' **As a team, we met and exceeded our client's original picture of success by the end of the project's one-year time frame. **I reduced the status meeting data collection time to less than 30 minutes through automation and used historical data to reduce our estimation error. **As the support manager, I kept our [http://fedoraproject.org/ RedHat Fedora Core] server and software available, secure, usable, and backed up using only one hour per week of my time on average throughout the project. *'''[http://www.cmu.edu/hub/reg/grading.html Quality point average]:''' Graduated with 4.03 out of 4.00, which is a weighted grade point average (GPA), due to earning several A+ grades ===[http://www.bryant.edu/ Bryant University]=== *'''[http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Undergraduate%20Programs/ Bachelor of Science in Business Administration]''' *[http://en.wikipedia.org/wiki/Smithfield%2C_Rhode_Island Smithfield, Rhode Island] *'''Graduation:''' May 2000 *[http://www.aacsb.edu/ AACSB] [http://www.aacsb.edu/members/Omd/Profile_page2.asp?LinkId=38588&CallingPage=InstLists Accredited] *'''Focus areas studied:''' [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Computer%20Information%20Systems Computer information systems] with a minor in [http://www.bryant.edu/wps/wcm/connect/Bryant/Academics/Areas%20of%20Study/Applied%20Statistics applied business statistics] *'''[http://en.wikipedia.org/wiki/GPA#United_States Grade point average]:''' Graduated [http://en.wikipedia.org/wiki/Summa_cum_laude summa cum laude] with a GPA of 3.96 out of 4.00 *'''Leadership:''' Served as president of [http://web.bryant.edu/~pride Bryant PRIDE] for more than a year and conducted a [http://en.wikipedia.org/wiki/Linux Linux] installation event ===Certification=== *'''[https://www.redhat.com/training/rhce/courses/ RedHat Certified Engineer]''' (RHCE for 6.2): [https://www.redhat.com/training/certification/verify/ 806200565301847] 67f7fde91d823831dd1128c85f7efda8f35c2bdc